2016-04-12 2 views
-1

Я client.json так:Получить JSON следующий и предыдущий объект в PHP

[ 
{"client":"Jhon_White", "age":"25", "gender":"male"}, 
{"client":"Jhon_black", "age":"27", "gender":"fem"}, 
{"client":"Jhon_brown", "age":"29", "gender":"male"}, 
{"client":"Jhon_orange", "age":"45", "gender":"fem"}, 
{"client":"Jhon_blu", "age":"55", "gender":"fem"} 
] 

я использовать это, чтобы расшифровать и принять де информацию

$data=file_get_contents('client.json'); 
$arrJson=json_decode($data); 

$keyVal='Jhon_brown'; 

foreach($arrJson as $key=> $val) 
{if($val->client==$keyVal) 
{ $client=$val->client; $age=$val->age; $gender=$val->gender;}; 

echo $client; echo $age; echo $gender; 

это дает мне информацию от «Jhon_brown " ряд.

Мне нужно сделать две ссылки, которые приведут меня к следующему или предыдущему клиенту из строки «Jhon_brown». не зная имя клиента или добавляя новые данные в json.

Как найти следующее имя клиента или предыдущее в php.

+0

Вы можете применить капельку достойного форматирования для кода ...?! – deceze

+0

Это ужасное форматирование кода, ничего себе. –

+0

Возможный дубликат [Получить следующий элемент в цикле foreach] (http://stackoverflow.com/questions/5096791/get-next-element-in-foreach-loop) –

ответ

0

Вам не нужно перебирать элементы в цикле.

попробовать что-то вроде этого:

<?php 
    $data = json_decode(file_get_contents('client.json')); 
    $path = $_SERVER['PHP_SELF']; 
    $frst = 0; 
    $last = count($data - 1); 

    $indx = ($_GET['indx'] ? $_GET['indx']: 2); // Jhon_brown is: 2 
    $prev = $path."?indx=".(($indx <= $frst) ? $frst : ($indx - 1)); 
    $next = $path."?indx=".(($indx >= $last) ? $last : ($indx + 1)); 
    $page = '<a href="'.$prev.'">Prev</a> | <a href="'.$next.'">Next</a>'; 

?> 

<html> 
    <head></head> 
    <body> 
     Current Client: <b><?= $data[$indx] ?></b> 
     <br> 
     See: <?= $page ?> 
    </body> 
</html> 
+0

Это дает мне ошибку в строке 4. –

+0

Редактируйте код по своему усмотрению, это просто пример. Убедитесь, что ваш JSON-файл имеет действующий код JSON внутри него; альтернативно, проверьте переменную '$ data', убедитесь, что она не' null', что может означать недействительный JSON. – argon

0

Один из способов - просто использовать значение индекса в массиве Json.

$data=file_get_contents('client.json'); 
$arrJson=json_decode($data); 
$keyVal='Jhon_brown'; 
$clientIndex = -1; 
for ($i = 0 ; $i < count($arrJson); $i++) { 
    if ($arrJson[$i]->client === $keyVal) { 
     $client = $arrJson[$i]->client; 
     $age = $arrJson[$i]->age; 
     $gender = $arrJson[$i]->gender; 
     $clientIndex = $i; 
    } 
} 
if ((0 < $clientIndex) && ($clientIndex < count($arrJson))){ 
    // the previous and following clients exist 
    // and are inbound, do stuff here 
} 

Возможно, вы захотите рассмотреть сортировку массива и использовать лучший алгоритм поиска, чем линейный поиск. Также, пожалуйста, укажите свой код, чтобы сделать его более читаемым :)

Смежные вопросы