我有这样的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中找到下一个客户名称或之前的名称。
答案 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>