json- keys erhalten aus diesem string?

2 Antworten

$json = array(
    "products" => array(
        "67" => array(
            array(
              "PartnerID" => "1",
              "PartnerServer" => "127.0.0.1"
              ),
            array(
              "PartnerID" => "2",
              "PartnerServer" => "192.168.1.1"
              ),
            array(
              "PartnerID" => "3",
              "PartnerServer" => "255.255.255.255"
              )
        )
     )
  );

// zu suchende partner_id
$my_partner_id=2;


// 1. Moeglichkeit mit for:
for ($i = 0; $i < count($json['products'][67]); $i++) {
    if ($json['products'][67][$i]['PartnerID']
          == $my_partner_id)
    {
        printf(
            "P-ID: %s, P-Server: %s\n",
            $json['products'][67][$i]['PartnerID'],
            $json['products'][67][$i]['PartnerServer']
            );

        break;
    }
}

// 2. Moeglichkeit mit foreach:
foreach ($json['products'][67] as $product) {
    if ($product['PartnerID'] == $my_partner_id) {
        printf(
            "P-ID: %s, P-Server: %s\n",
            $product['PartnerID'],
            $product['PartnerServer']
            );

        break;
    }
}



MarcelDerAdmin 
Fragesteller
 23.12.2021, 15:22

Danke hat perfekt funktioniert bist mein Retter !

0

Zunächst mal hast Du den Ausdruck bei $array = '....' in Single Quotes gesetzt. Damit baust Du keine Arraystruktur auf, sondern sagst, dass das Array genau ein Element hat, das ein langer String ist, dessen Inhalt alles ist, das zwischen den Hochkommas steht. Das wolltest Du vermutlich nicht machen.

Wenn Du eine Struktur aufbauend definieren willst, könntest Du dies beispielsweise so machen:

$array = array(
    "products" => array(
      "67" => array(
        array(
          "PartnerID" => "1",
          "PartnerServer" => "127.0.0.1"
        ),
        array(
          "PartnerID" => "2",
          "PartnerServer" => "192.168.1.1"
        ),
        array(
          "PartnerID" => "3",
          "PartnerServer" => "255.255.255.255"
        )
      )
    )
  );

Ich glaube aber eher, dass Du etwas anderes machen wolltest, nämlich, Du hast ein JSON-File, und oder JSON als String definiert und willst daraus eine verschachtelte PHP-Arraystruktur erzeugen.

In diesem Fall müsstest Du einen JSON-String definieren oder die Daten aus einem File lesen, und danach *decoden*.

$jsonstr =
  '{ '
  .'  "products": { '
  .'    "67": [ '
  .'      { '
  .'        "PartnerID": "1", '
  .'        "PartnerServer": "127.0.0.1" '
  .'      }, '
  .'      { '
  .'        "PartnerID": "2", '
  .'        "PartnerServer": "192.168.1.1" '
  .'      }, '
  .'      { '
  .'        "PartnerID": "3", '
  .'        "PartnerServer": "255.255.255.255" '
  .'      } '
  .'    ] '
  .'  } '
  .'} ';

$json = json_decode($jsonstr);

// Elementzugriff:

printf(
  "Partner-ID=%d\n",
  $json['products'][67][$i]['PartnerID']
  );



MarcelDerAdmin 
Fragesteller
 22.12.2021, 17:07

Wie könnte man dort nun checken ob meine id 1 in partnerid von 67 enthalten ist?

also ein vor loop um zu kucken ob meine id gleich ist wie eine der partner ids des json strings

0
davegarten  22.12.2021, 17:16
@MarcelDerAdmin

Willst Du denn mit dem Loop nur die verschiedenen Partner-ID's unterhalb von "67" durchforsten, oder meinst Du, dass "67" ebenfalls einer von vielen Einträgen ist, und es z.B. auch einen Eintrag "68", "69", "70" usw. gibt?

Das müsste ich genauer wissen, sonst kann ich nicht gut einen Loop schreiben.

0
MarcelDerAdmin 
Fragesteller
 22.12.2021, 17:20
@davegarten

also die 67 ist eine produkt id, aber ich muss checken ob alle product ids von 67 auch meine beinhaltet, also das erste quasi

0
davegarten  22.12.2021, 17:51
@MarcelDerAdmin

Du meintest wohl: "[...] aber ich muss checken, ob alle *partner-ids* unterhalb der product-id 67 auch Deine *partner-id* beinhaltet".

Ich poste Dir ein Beispiel in einer neuen Antwort.

0