一些简单的代码,如果我有一个json数据。我想做一些事情,首先检查json数据中的match string
,如果有,则输出匹配行后的值,否则输出所有json数据。
Exapmle 1,匹配字符串为9,在json数据中匹配,在匹配行7,3之后输出值。
$txt = '[{"a":"5"},{"a":"9"},{"a":"7"},{"a":"3"}]';
$array = json_decode($txt);
$match_string = '9';
foreach ($array as $data){
echo $data->a;//7, 3
}
Exapmle 2,匹配字符串为2,在json数据中不匹配,输出所有值,5,9,7,3。
$txt = '[{"a":"5"},{"a":"9"},{"a":"7"},{"a":"3"}]';
$array = json_decode($txt);
$match_string = '2';
foreach ($array as $data){
echo $data->a;//5, 9, 7, 3
}
如何判断?我在foreach中执行某些操作,只需忽略匹配字符串:
if($match_string == $data->a){
continue;//fut this in the foreach ,get 5, 7, 3, but I need 7, 3, next value from 9.
}
感谢。
答案 0 :(得分:2)
您需要设置一个标记,告诉您是否找到了匹配项:
$txt = '[{"a":"5"},{"a":"9"},{"a":"7"},{"a":"3"}]';
$array = json_decode($txt);
$match_string = "2";
$found = false;
foreach ($array as $data) {
if ($found) {
echo $data->a;
} else if ($data->a === $match_string) {
// If we set $found *after* we have the opportunity to display it,
// we'll have to wait until the next pass.
$found = true;
}
}
if (!$found) {
// Display everything
foreach ($array as $data) {
echo $data->a;
}
}
答案 1 :(得分:2)
缩短时间。
$txt = '[{"a":"5"},{"a":"9"},{"a":"7"},{"a":"3"}]';
$array = json_decode($txt);
$toFind = "9";
$mapped = array_map("current",$array);
if (!in_array($toFind,$mapped))
echo implode(", ",$mapped);
else
echo implode(", ",array_slice($mapped,array_search($toFind,$mapped)+1));
请注意,您不会保留具有该功能的键 编辑演出
答案 2 :(得分:1)
$matched = false;
foreach($array as $data){
if($matched)
echo $data->a;
$matched = ($data->a==$matchString) || $matched;
}
if(!$matched)
foreach($array as $data)
echo $data->a;
那是你的基本情况。
答案 3 :(得分:0)
如果$ txt是有序列表而不是数组字典,那么下面的代码应该可以工作(对不起;我显然是产生幻觉)。
<?php
$txt = '[{"a":"5"},{"a":"9"},{"a":"7"},{"a":"3"}]';
$array = json_decode($txt);
$match_string = '9';
$found = false;
foreach ($array as $data)
{
if ($found) // Line before was lucky
{
print $data->a;
break;
}
if ($data->a == $match_string)
$found = true;
}
if (!$found)
{
// Output the whole object
}
?>
目前还不清楚当所需的匹配是数组中的最后一个条目时应该发生什么。发生的事情是没有任何东西得到输出,因为已找到该行但没有后继者。