json- keys erhalten aus diesem string?
hab diesen code:
$array = array('{"products":{ "67": [
{"PartnerID":"1", "PartnerServer":"127.0.0.1"},
{"PartnerID":"2", "PartnerServer":"192.168.1.1"},
{"PartnerID":"3", "PartnerServer":"255.255.255.255"}
]
}}');
Wie kann ich aus products PartnerID und oder PartnerServer einzeln bekommen.
Ich müsste auch checken ob meine nummer (1) in partnerid bei 67 vorhanden wäre.
hab das erste mit
echo $json.products["67"].PartnerID
versucht aber ging nicht.
hab auch
$json = json_encode($array);
gemacht!
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; } }
Danke hat perfekt funktioniert bist mein Retter !
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']
);
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.
also die 67 ist eine produkt id, aber ich muss checken ob alle product ids von 67 auch meine beinhaltet, also das erste quasi
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.
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