PHP-Array in Array erstellen

tklustig

Erfahrenes Mitglied
Hallo Leute,
folgender Code ergibt folgender var_dump()
PHP:
        $articleRoot = $this->filename;
        $xmlDataRoot = array();
        $arItems2BeUsedAssigningCategories = array();
        $arSeveralItems = array();
        $arIndizies = array();
        $xml = simplexml_load_file($articleRoot, 'SimpleXMLElement', LIBXML_NSCLEAN);
        //ierate about XML File
        foreach ($xml->row as $item) {
            $xmlDataRoot[] = $item;

        }
        for ($i = 0; $i < count($xmlDataRoot); $i++) {
            $arItems2BeUsedAssigningCategories[$i]['product_number'] = $xmlDataRoot[$i]->product_number->__toString();
            $arItems2BeUsedAssigningCategories[$i]['name'] = $xmlDataRoot[$i]->name->__toString();
        }
        for ($i = 0; $i < count($arItems2BeUsedAssigningCategories) - 1; $i++) {
            if ($arItems2BeUsedAssigningCategories[$i]['product_number'] === $arItems2BeUsedAssigningCategories[$i + 1]['product_number']) {
                $arSeveralItems[] = array(
                    "product_number" => $arItems2BeUsedAssigningCategories[$i + 1]['product_number'],
                    "name"           => $arItems2BeUsedAssigningCategories[$i + 1]['name']
                );
                $arIndizies[] = $i;
            }
        }
        for ($i = 0; $i < count($arIndizies); $i++) {
            unset($arItems2BeUsedAssigningCategories[$arIndizies[$i]]);
        }
        $arItems2BeUsedAssigningCategories=array_values($arItems2BeUsedAssigningCategories);
        dd($arSeveralItems);

Var_dump():
1726820649148.png

Ich möchte, dass all diejenigen name Werte die für dieselbe Produktnummer hinterlegt sind, in ein neues Array gepackt werden, in der Form:"product_number" => "90000" "name"=>"NADELN U. KLAMMERN U. ZANGEN","ABRISSFOLIE","TRANSPORT U. AUFBEWAHRUNG" etc.etc.,"product_number" => "90001", "name"=>"PAPIERPRODUKTE"etc.etc..)
Die Anzahl der Elemente im neuen assoziativen Array ist dann natürlich wesentlich kleiner als ein
PHP:
count($arSeveralItems);
Wie bekomme ich das am elegantesten hin? Vorab vielen Dank für jedwelche Hilfestellungen!
 

Anhänge

  • 1726820642684.png
    1726820642684.png
    19,7 KB · Aufrufe: 2
Zuletzt bearbeitet:
Würden die Daten so in einer Datenbank stehen, wäre das ein simples SQL-SELECT-Statement.

Von Hand ist das in der Regel zwei ineinander verschachtelte Schleifen.

Ansatz:
Laufe in einer ersten Schleife durch den DataRoot, und sammle nur die EINDEUTIGEN ProductNumbers.
In deinem Beispiel hätte das resultierende Array zwei Elemente.
In einer zweiten Schleife (geschachtelt mit einer inneren Schleife) sammelst du dann die "name"-Werte aus der inneren Schleife die zur ProductNumber der äusseren Schleife passen
 
Zurück