mehrdimensionales array, key finden

Hallo alle zusammen,

habe aktuell ne Blockade.

habe ein merd. Array:


PHP:
Array
(
    [0] => Array
        (
            [Item_ID] => 1
            [Anzahl] => 1
            [Level] => 1
        )

    [1] => Array
        (
            [Item_ID] => 4
            [Anzahl] => 1
            [Level] => 1
        )

)

das Array kann auch noch mehr Werte bekommen.
Wie kann ich überprüfen, ob Item ID 1 und 4 vorhanden sind?
 
Ich würde versuchen mittels array_column() die item_ids extrahieren und mit in_array() durchsuchen

Falls du PHP < 5.5 hast, hier eine alternative Funktion zu array_column():
array_extract_sub_item()

völlig ungetestet
PHP:
$itemIds = array_column($my_array, 'Item_ID');
if(in_array(1, $itemIds) && in_array(4, $itemIds)){
    //TODO: 1 und 4 sind enthalten
}

Code:
//alternative Prüfung. mMn die bessere Wahl da sie flexibel ist
//http://stackoverflow.com/a/8894807
$search = array(1, 4);
if (count(array_diff($search, $itemIds)) == 0) {
    //TODO: 1 und 4 sind enthalten
}
 
Zuletzt bearbeitet:
Noch eleganter als ein 2 Zeiler?
Du kannst es ja eine Funktion auslagern

PHP:
function existsSubValues($iArray, $iSubKey, $iSearch){
    $itemIds = array_column($iArray, $iSubKey);
    return count(array_diff($iSearch, $itemIds)) == 0;
}

Und der Aufruf
PHP:
$vorhanden = existsSubValues($myArray, 'Item_ID', array(1, 4));
 
okay habe es jetzt mit der ersten Version realisiert.
PHP:
$search = array(1, 4, 5);
if (count(array_diff($search, $itemIds)) == 0)
    {
        echo "nein";       
    }
else
    {
        echo "ja";  
    }

wie gesagt, mein array wird immer witer gefüllt,
so kann es sein, dass der nächste Eintrag wieder wie folgt lautet:

PHP:
Array
        (
            [Item_ID] => 1
            [Anzahl] => 1
            [Level] => 1
        )

und dann soll halt überprüft werden, ob es die item_id 1 schon gibt,
wenn ja => den bestehenden array eintrag bei anzahl + 1 erhören
wenn nein => den neuen eintrag den array hinzufügen.

wie kann ich denn abfragen, welche item ids im bestehenden array vorhanden sind?
 
habe jetzt folgendes Script:


Hier kurz noch die Erklärung der zwei fremden Variabeln:

$zufall_items ==== Array ( [0] => 4 [1] => 4 )
$_SESSION['inventar'], 'Item_ID' ==== Array ( [0] => 1 [1] => 4 [2] => 1 )


PHP:
$x = 0;   
$y = 0;
while ($x < count($zufall_items))
                                    {
                                        while ($y < count($zufall_items))
                                            {
                                                if (count(array_diff($zufall_items, array_column($_SESSION['inventar'], 'Item_ID'))) == 0)
                                                    {
                                                        $item_array[] = array
                                                                        (
                                                                            'Item_ID'     => $zufall_items[$y],
                                                                            'Anzahl'        => 1,
                                                                            'Level'          => 0
                                                                        );
                                                    }
                                                else
                                                    {
                                                        $item_array[$y]["Anzahl"] = $item_array[$y]["Anzahl"]+1;
                                                    }   
                                                $y++;
                                            }
                                        $x++;
                                    }



Aber der landet immer in der Schiene, dass er einen neuen Eintrag anleg, anstatt die Anzahl + 1 zu rechnen.
Habe ich irgendwo einen Denkfehler?
 
Wow, sehr umständlich

Mal so bevor ich mich auf den Inhalt konzentriere

item: Warum eine while-Schleife, das ist eine klassische for-Schleife

Weiter. Die Logik versteh ich nicht.
du gehst Count($zufall_items) Hoch 2 mal durch....

Bevor wir hier Fehler suchen. Erkläre doch mal, was genau das Ding machen sollte.

Nachtrag:
Ich glaube, ich verstehe.
Ich würde das so lösen
PHP:
$itemIds = array_column($item_array, 'Item_ID');

foreach($zufall_items as $idx => $zufallsItem){
    if(in_array($zufallsItem, $itemIds)){
        $item_array[$idx]['Anzahl']++;
    }else{
        $item_array[] = array('Item_ID' => $zufallsItem, 'Anzahl' => 1, 'Level' => 0);
    }
}
 
Zuletzt bearbeitet:
also eigentlich ist es ganz simple,

ich habe ein array, welches mit zufälligen IDs gefüllt wird ($zufall_items), mal sind es 2 IDs, mal 5 => zufällig halt :)
dieses array soll in das bestehende Array eingebunden werden ($_SESSION['inventar'])

Bevor diese Einbindung geschieht, soll überprüft werden, ob die jeweilige zufall Item ID im bestehenden array SESSION INVENTAR vorhanden ist:

wenn ja => im bestehenden Array SESSION INVENTAR die Anzahl der jeweiligen Item ID um 1 erhöhen
wenn nein => komplett neuer Eintrag ins Array SESSION INVENTAR
 
Ich habe inzwieschen mein Posting davor angepasst. Schaus dir mal an.

Nachtrag:
Ich glaube, ich verstehe.
Ich würde das so lösen
PHP:
$itemIds = array_column($item_array, 'Item_ID');

foreach($zufall_items as $idx => $zufallsItem){
    if(in_array($zufallsItem, $itemIds)){
        $item_array[$idx]['Anzahl']++;
    }else{
        $item_array[] = array('Item_ID' => $zufallsItem, 'Anzahl' => 1, 'Level' => 0);
    }
}
 
Zurück