Mir ist klar, es gibt eine Reihe von Fragen über multidimensionale Arrays und foreach Schleifen, und ich habe Stunden damit verbracht, sie zu lesen und zu versuchen, meine eigene Schleife zu arbeiten - ohne Erfolg. Wenn die Lösung ein Duplikat ist, werde ich meine Frage entfernen (oder einen Link zu einem anderen, wenn das bevorzugt wird).Mehrdimensionale Array-Schleife mit Array-Suche
nun die Herausforderung:
- eine Reihe von zurück MYSQL Ergebnissen. Die Ergebnisse stammen aus mehreren verknüpften Tabellen in einem assoziativen Array. Jetzt muss ich es in das multidimensionale Array konvertieren, das ich brauche.
- Ich habe das meiste davon funktioniert, aber mein Problem ist das Durchschleifen und Hinzufügen neuer Elemente an der richtigen Stelle im Array.
Hier einige Code:
//example of how array is setup in the way I want, this part works.
foreach($results as $i => $a):
//some other code is here, see below.
$items[$i] = [
"id" => $a['id'],
"itemid" => $a['itemid'],
"name" => $a['name'],
"def" => $a['def'],
"class" => $a['class'],
"timeline" => $a['timeline'],
"files" => [
[0] => [
"id" => $a['fileid'],
"name" => $a['filename'],
"path" => $a['filepath'],
"type" => $a['filetype']
]
],
"tags" => [
[0] => [
"id" => $a['tagid'],
"name" => $a['tagname']
]
]
];
endforeach;
dann auf die ‚Tags‘ oder ‚Dateien‘, um nur eine Reihe von Möglichkeiten, um eine Schleife durch, um hinzuzufügen, ich habe versucht, wenn das Element ‚id‘ ist das gleiche wie das letzte. Hier ist der aktuelle Code in meinem Lektor, nicht funktioniert:
//inside foreach loop, before above code
if($items[$i-1]['id'] == $a['id']):
//it is the same item, works to here.
if(in_array($a['filename'], $items[$i-1], FALSE)):
//add to files array for last item
$items[$i-1]['files'][] = [
"id" => $a['fileid'],
"name" => $a['filename'],
"path" => $a['filepath'],
"type" => $a['filetype']
];
elseif(in_array($a['tagname'], $items[$i-1], FALSE)):
//add to tags array for last item
$items[$i-1]['tags'][] = [
"id" => $a['tagid'],
"name" => $a['tagname']
];
endif;
else:// else it does the code above
Wie Sie sehen können, mein letzter Versuch war zu verwenden in_array, die ich jetzt erkennen, nicht auf mehrdimensionale Arrays funktioniert. Mein Problem ist, dass ich nicht herausfinden kann, ob es eine neue Datei oder einen neuen Tag für den gleichen Artikel gibt.
Letztendlich möchte ich eine Reihe von 'Elementen', die mehrere 'Dateien' und 'Tags' haben. Ich gehe zu json_encode und benutze es danach mit JS.
Irgendwelche Ratschläge, wie man das funktioniert oder es optimiert, würde sehr geschätzt werden.
P.S. Wie ich oben erwähnt habe, weiß ich, dass diese Frage schon einmal gestellt wurde - obwohl ich nicht in der Lage war, ihre Lösungen für mich arbeiten zu lassen. Ich werde diese Frage entfernen, wenn die Lösung ein Duplikat ist (wie in, es ist nicht wirklich hilfreich für andere). Danke für jede Hilfe, es wird sehr geschätzt!
Was ist Ihre PHP-Version? Bei PHP> = 5.5 können Sie ['array_column'] (http://php.net/manual/en/function.array-column.php) verwenden:' in_array ($ a ['filename'], array_column ($ items [$ i-1] ['files'], 'name')) ' – fusion3k
Danke für den Tipp @ fusion3k. Ich lese die Dokumente zu dieser Funktion und versuche es. – turnfire