Tom: Suche in einem Mehrdimensionalem Array

Beitrag lesen

Hello,

die Suche in einem Mehrdimensionalem Array :)
Die Datenbank wird abgefragt, die Daten werden in einem Mehrdimensionalem Array gespeichert.

Array Aufbau:

Array

(
    [0] => Array
        (
            [0] => TEST    //Name
            [1] => 12430   //ID
            [2] => Y       //Save
            [3] => -101    //Wert
        )

[1] => Array
        (
            [0] => TEST    //Name
            [1] => 12710   //ID
            [2] => Y       //Save
            [3] => -99     //Wert
        )
...


>   
> Der Wert "Y" ändert sich ständig. Ich muss den Wert "Y" mit der "ID" überprüfen.  
> Wie schaffe ich das?  
  
Nimm einen anderen Array-Aufbau. Es ist durchaus erlaubt, quer zu denken und sich seine Datenstrukturen so anzulegen, wie man sie benötigt:  
  
<http://forum.de.selfhtml.org/archiv/2009/5/t187244/#m1244374>  
  
Dann würde dein Array in etwa so aussehen:  
  
~~~php
  
$_data['name'][0] = 'TEST'  
$_data['name'][1] = 'TEST'  
...  
$_data['id'][0]   = 12430  
$_data['id'][1]   = 12710  
...  
$_data['save'][0]   = 'Y'  
$_data['save'][1]   = 'Y'  
...  
$_data['wert'][0]   = -101  
$_data['save'][1]   = -99  

BTW: es bietet sich an, bezeichner z.B. immer klein zu schreiben und nicht mal gemein, mal versal, mal in Höckerschreibweise (camelCase),

Die benötigrten Funktionen für das Array in Spaltenschreibweise sind:

$recno ist die Unique-Datensatz-ID

  
#------------------------------------------------------------------------------  
function get_record (&$_data, $recno)  
{  
    $_rec = array();  
  
    foreach ($_data as $colname => $field)  
    {  
        $_rec[$colname] = isset($_data[$colname][$recno])?$_data[$colname][$recno]:NULL;  
    }  
  
    return $_rec;  
}  
#------------------------------------------------------------------------------  

  
#------------------------------------------------------------------------------  
function delete_record (&$_data, $recno)  
{  
    $cols_deleted = 0;  
  
    foreach ($_data as $colname => $field)  
    {  
        unset($_data[$colname][$recno]);  
        $cols_deleted++;  
    }  
  
    return $cols_deleted;  
}  
#------------------------------------------------------------------------------  

  
#------------------------------------------------------------------------------  
function update_record(&$_data, $recno, $_record, $expand=false)  
{  
    $cols_updated = 0;  
  
    foreach ($_record as $colname => $data)  
    {  
        if ($expand or isset($_data[$colname][$recno]))  
        {  
            $_data[$colname][$recno] = $data;  
            $cols_updated++;  
        }  
    }  
  
    return $cols_updated;  
}  
#------------------------------------------------------------------------------  

  
#------------------------------------------------------------------------------  
function insert_record(&$_data, $recno, $_record, $expand=false, $overwrite=false)  
{  
    $cols_inserted = 0;  
  
    if (!$overwrite)  
    {  
        foreach($_record as $colname => $data)  
        {  
            if (isset($_data[$colname][$recno]))  
            {  
                return 0;  
            }  
        }  
    }  
  
    foreach ($_record as $colname => $data)  
    {  
        if ($expand or isset($_data[$colname]))  
        {  
            $_data[$colname][$recno] = $data;  
            $cols_inserted++;  
        }  
    }  
  
    return $cols_inserted;  
}  
#------------------------------------------------------------------------------  

Die Funktionen sind universell. Du kannst sie also benutzen, ohne nochmal Hand anlegen zu müssen.

Außerdem bietet es sich an, sofort die Unique-ID aus der DB auch als Index im Array zu benutzen:

dann würde dein Array in etwa so aussehen:

  
$_data['name'][12430] = 'TEST'  
$_data['name'][12710] = 'TEST'  
...  
$_data['save'][12430]   = 'Y'  
$_data['save'][12710]   = 'Y'  
...  
$_data['wert'][12430]   = -101  
$_data['save'][12710]   = -99  

Über den Index kann man seine Spalten nun im Direktzugriff vergleichen und muss nicth erst suchen.

#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Und sollte mal wieder der Spruch kommen: "Datenstrukturen soll man aber zusammenhalten" dann hier bereits meine Erwiderung: Die Daten stehen doch zusammen (im Speicher)! Und was meint Ihr denn, wie die Datenbank das intern organisiert?
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Viel Spaß damit

und

liebe Grüße aus dem schönen Oberharz

Tom vom Berg

--
 ☻_
/▌
/ \ Nur selber lernen macht schlau
http://bikers-lodge.com