2015-05-18 12 views
5

Ich habe das folgende JSON-Array, in diesem Fall hat es nur drei Einträge, aber es könnte auch mehr sein.JSON: Eingabe mit einem bestimmten Wert

[ 
    { 
     "id": 45, 
     "text": "apple" 
    }, 
    { 
     "id": 37, 
     "text": "pear" 
    }, 
    { 
     "id": 22, 
     "text": "strawberry" 
    } 
] 

Nun meine Frage ist: Wie bekomme ich die text Variable des Eintrags mit (zum Beispiel) id37 in PHP zu sein? Ist es möglich, so leicht zu kommen?

Was ich weiß:

<?php 
    $fruits = json_decode(file_get_contents("file.json"), true); // First I decode the file 
    for ($i = 0; $i < count($fruits); $i++) { 
     // Using this for loop and if condition, I get the text I need 
     if ($fruits[$i]['id'] == 37) echo $fruits[$i]['text']; 
    } 
?> 

Aber ich will nicht eine for-Schleife verwenden, da meine JSON-Array mehr hat: Ich habe eine for-Schleife für die Suche nach den Text wie folgt aus (in PHP) verwenden könnte als 3 Einträge, und wenn ich viele Daten in kurzer Zeit anfordere, dauert es lange, bis die for-Schleife jeden Eintrag durchläuft. Gibt es einen effektiveren Weg zum selben Ergebnis? Kann mir das jemand in PHP erklären?

+0

Ich denke, Sie müssen jede Art von Schleife verwenden, um Ihre Informationen zu erhalten. Sie könnten 'array_filter()' verwenden, aber dies ist auch eine interne Schleife. – TiMESPLiNTER

+0

Die meisten der unten vorgeschlagenen Lösungen verwenden intern eine (jede) Schleife und sind daher nicht wesentlich schneller als Ihre eigene vorgeschlagene Lösung. Für den Fall, dass Sie die 'json' Daten mehrmals suchen müssen, würde ich vorschlagen, sie als' key' 'value' mit der' id' als Schlüssel zu speichern. Dies wird bereits mehrfach vorgeschlagen. – Wilt

+0

Kontrollieren Sie die Datenstruktur Dejori David?Können Sie Elemente nach ID sortieren, wenn Sie die JSON-Daten erstellen? Wenn dies der Fall ist, können Sie die binäre Suche darauf anwenden. – Klaus

Antwort

0

, wenn Sie Ihre json Struktur ändern können, dann ist es möglich.

Wenn Sie json wie diese

{ 
    "45":{ 
     "text": "apple" 
    }, 
    "37":{ 
     "text": "pear" 
    }, 
    "22":{ 
     "text": "strawberry" 
    } 
} 

und in php

echo $item['37']['text']; 

Das schaffen :)

0

Ändern Sie diesen Code:

<?php 
    $fruits = json_decode(file_get_contents("file.json"), true); // First I decode the file 
    for ($i = 0; $i < count($fruits); $i++) { 
     // Using this for loop and if condition, I get the text I need 
     if ($fruits[$i]['id'] == 37) echo $fruits[$i]['text']; 
    } 
?> 

zu

<?php 
    $fruits = json_decode(file_get_contents("file.json"), true); // First I decode the file 
    foreach ($fruits as $fruit) { 
     // Using this for loop and if condition, I get the text I need 
     if ($fruits['id'] == 37) { 
     echo $fruits['text']; 
     //rest of your code you like to add 
     } 
    } 
?> 

wenn Sie beabsichtigen, dann Code unten verwenden nur für Schleife zu verwenden:

<?php 
    $fruits = json_decode(file_get_contents("file.json"), true); // First I decode the file 
    for ($i = 0; $i < count($fruits); $i++) { 
     // Using this for loop and if condition, I get the text I need 
     if ($fruits['id'] == 37) { 
     echo $fruits['text']; 
     //rest of your code you like to add 
     } 
    } 
?> 
+0

Fügen Sie auch einen 'break;' im 'if' Block hinzu. Um die Schleife zu stoppen, wenn Sie gefunden haben, was Sie wollen. – TiMESPLiNTER

+0

Sie Referenzierung der '$ fruits' als Objekt, wenn es als ein Array decodiert wurde. Dies wird Fehler werfen. – Darren

+1

@Darren, bearbeitet danke für die Benachrichtigung. –

0

Man könnte es mit diesem tun einfach :

foreach($fruits as $item) { 
    if($item['id'] == 37) { echo $item['text']; break; } 
} 

Example

1

Die Lösung mit array_filter():

$yourEntry = current(array_filter($jsonArray, function(\stdClass $entry) { 
    return ($entry->id == 37); 
})); 

See the example

+0

Bekommt meine Abstimmung, liebe die array_filter Alternative! – Darren

0

Sind in der Kontrolle über die json Datenstruktur helfen? Wenn dies der Fall ist, könnten Sie den Zugriff über den Array-Schlüssel, z.

{ 
    '37': 'pear', 
    '45': 'apple', 
    '22': 'strawberry' 
} 

$ Früchte = json_decode (file_get_contents ("file.json"), true);

echo $ fruits ['37 ']; // Birne

Verwandte Themen