2015-05-18 16 views
5

Mam następującą tablicę JSON, w tym przypadku ma tylko trzy wpisy, ale może być ich więcej.JSON: Uzyskanie wpisu o określonej wartości

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

Teraz moje pytanie brzmi: w jaki sposób mogę uzyskać text zmienną wpisu z (na przykład) id będąc 37 w PHP? Czy można to łatwo uzyskać?

Co wiem: można używać dla pętli do znajdowania tekstu jak to (w PHP):

<?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']; 
    } 
?> 

Ale nie chcę użyć pętli for, jak moja tablica JSON ma więcej niż 3 wpisy, a jeśli zażądam dużej ilości danych w krótkim czasie, to zajmie to dużo czasu, aż pętla for przejdzie przez każdy wpis. Czy istnieje skuteczniejszy sposób osiągnięcia tego samego wyniku? Czy ktoś może mi to wyjaśnić w PHP?

+0

Myślę, że musisz użyć dowolnego rodzaju pętli, aby uzyskać informacje. Można użyć 'array_filter()', ale to także pętlę wewnętrzną. – TiMESPLiNTER

+0

Większość proponowanych poniżej rozwiązań wykorzystuje wewnętrzną pętlę for (each), więc nie będą one znacznie szybsze niż własne sugerowane rozwiązanie. W przypadku wielokrotnego przeszukiwania danych 'json' sugerowałbym przechowywanie ich jako' klucz' 'wartość' z' id' jako kluczem. Zasugerowano to już kilka razy. – Wilt

+0

Czy kontrolujesz strukturę danych Dejori David?Czy możesz utworzyć elementy posortowane według id podczas tworzenia danych json? jeśli tak, możesz zastosować do niego wyszukiwanie binarne. – Klaus

Odpowiedz

0

czy można zmienić strukturę json to jest możliwe.

Jeśli tworzysz json jak ten

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

iw php

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

to pomoże :)

0

Zmień ten kod:

<?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']; 
    } 
?> 

do

<?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 
     } 
    } 
?> 

jeśli masz zamiar używać do pętli tylko wtedy skorzystać z poniższego kodu:

<?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

Dodaj także 'break;' w bloku 'if'. Aby zatrzymać pętlę, jeśli znalazłeś to, co chcesz. – TiMESPLiNTER

+0

Odwołujesz się do '$ fruits' jako obiektu, kiedy został zdekodowany jako tablica. To spowoduje błędy. – Darren

+1

@Darren, edytowane dzięki za powiadomienie. –

0

Można to zrobić po prostu z tego :

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

Example

0

Czy jesteś w kontroli struktury danych json? Jeśli tak, możesz przejść do dostępu za pomocą klucza tablicy, np.

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

$ fruits = json_decode (file_get_contents ("file.json"), true);

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

Powiązane problemy