在php中获取JSON next和previous对象

时间:2016-04-12 15:11:29

标签: php json

我有这样的client.json:

[ 
{"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中找到下一个客户名称或之前的名称。

2 个答案:

答案 0 :(得分: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
}

您可能需要考虑对数组进行排序并使用比线性搜索更好的搜索算法。 另外,请缩进代码以使其更具可读性:)

答案 1 :(得分: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>