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