PHP Array im Array erzeugen, innerhalb zweiter foreach Schleifen

Blackbenji

Lieutenant
Registriert
Nov. 2009
Beiträge
557
Hallo zusammen,

ich stelle mich vielleicht gerade etwas kompliziert an.
Ich zapfe ein JSON an und decode dieses.
Anschließend versuche ich den Inhalt in ein Array zu schreiben um dieses weiter zu verarbeiten.

Das JSON sieht z.B. so aus:

PHP:
{
  "live": [
    {
     {
      "name": "app1",
      "clones": "2",
      "values": [
        {
          "clone": "0",
          "url": "http://clone-0"
        },
        {
          "clone": "1",
          "url": "http://clone-1"
        }
      ]
    },

Mein Code sieht nun wie folgt aus:

PHP:
        $json = file_get_contents('http://localhost/urls.json');
        $user = json_decode($json, true);

        $arr = [];
        foreach ($user[$environment] as $mydata) {
            $arr[] = array(
                "id" => $mydata['name'],
                "clones" => $mydata['clones'],
                "name" => $mydata['name']
            );
            foreach($mydata['values'] as $values) {
                $arr['values'][] = array (
                    "url" => $values['url']
                );
            }

        }

        return $arr;

Mein Problem im Moment ist folgendes:
PHP:
array(..) {
  [0]=>
  array(4) {
    ["id"]=>
    string(5) "1"
    ["clones"]=>
    string(1) "2"
    ["name"]=>
    string(5) "app1"
  }
  ["values"]=>
  array(97) {
    [0]=>
    array(1) {
      ["url"]=>
      string(14) "http://clone-1"
    }
    [1]=>
    array(1) {
      ["url"]=>
      string(14) "http://clone-2"
    }
  }
}

Das "neue" Array wird nicht in das vorhandene geschrieben, sondern generiert ein neues.

Was ich haben möchte wäre dieses hier:

PHP:
array(..) {
  [0]=>
  array(4) {
    ["id"]=>
    string(5) "1"
    ["clones"]=>
    string(1) "2"
    ["name"]=>
    string(5) "app1"
    ["values"]=>
    array(..) {
      [0]=>
      array(1) {
        ["url"]=>
        string(14) "http://clone-1"
      }
      [1]=>
      array(1) {
        ["url"]=>
        string(14) "http://clone-2"
      }
    }
  }
}

Geht das? Wenn ja, wie? Wo habe ich einen Denkfehler?
 
Speicher dir das Array in der Schleife irgendwo zwischen und setz es nach allem auf $arr drauf.
 
Was genau meinst Du mit Zwischenspeichern? In der ersten oder in der zweite Schleife?
Und "setz es nach allem auf $arr drauf."? mit nem array_push oder merge, oder was genau meinst Du?
 
Es geht scheinbar einfacher als ich es dachte:

PHP:
        foreach ($user[$environment] as $mydata => $content) {
            var_dump($content);
        }
 
Blackbenji schrieb:
Was genau meinst Du mit Zwischenspeichern?
In Zeile 6 schmeißt du bereits Daten mit neuem Index aufs Array. In Zeile 12 erzeugst du den Key "values" auf eben diesem Array. Ist doch logisch dass sowas raus kommt. Du schmeißt die Daten ja nicht aufs Array mit jenem neuen erzeugtem Index.
PHP:
        $json = file_get_contents('http://localhost/urls.json');
        $user = json_decode($json, true);

        $arr = [];
        foreach ($user[$environment] as $mydata) {
            $ar2 = array(
                "id" => $mydata['name'],
                "clones" => $mydata['clones'],
                "name" => $mydata['name'],
                "values" => array()
            );
            foreach($mydata['values'] as $values) {
                $ar2['values'][] = array (
                    "url" => $values['url']
                );
            }
            $arr[] = $ar2;
        }

        return $arr;
 

Ähnliche Themen

Zurück
Oben