我使用foreach循环来回显多维数组中的名称。
样本数组:
(
[0] => Array
(
[id] => 78
[name] => audi
[sscat_id] => 59
[date] => 0000-00-00 00:00:00
)
[1] => Array
(
[id] => 106
[name] => apache
[sscat_id] => 86
[date] => 0000-00-00 00:00:00
)
[2] => Array
(
[id] => 16
[name] => asia
[sscat_id] => 62
[date] => 0000-00-00 00:00:00
)
我需要实现一个条件,如果我的数组的$_GET['b']
列中存在id
的值,我想要回显该子数组的name
值。< / p>
如果我的数组中不存在$_GET['b']
,我想回显数组中的所有name
值。
这是我失败的代码:
foreach ($readJson as $key => $value){
if($_GET["b"] === $value["id"]){ // here is statement
echo $value["name"]; // I want to echo just this item not others
// maybe break; ?
} else {
echo $value["name"]; // echo all items
}
}
我想我需要break
这样的内容,但我知道break
之后不会回传项目。
或者,如果我得到项目索引,也许我可以通过索引或ID回应它?有什么建议吗?
答案 0 :(得分:1)
代码:(Demo)
$readJson=[
['id'=>78,'name'=>'audi','sscat_id'=>59,'date'=>'0000-00-00 00:00:00'],
['id'=>106,'name'=>'apache','sscat_id'=>86,'date'=>'0000-00-00 00:00:00'],
['id'=>16,'name'=>'asia','sscat_id'=>62,'date'=>'0000-00-00 00:00:00']
];
$_GET['b']=16; // test case for echoing one
//$_GET['b']=99; // test case for echoing all
if(($index=array_search($_GET["b"],array_column($readJson,'id')))!==false){ // id exists in multi-dim array
echo $readJson[$index]['name'];
}else{ // id not found, show all
echo implode(', ',array_column($readJson,'name'));
}
输出:
asia
当$_GET['b']=99
时,输出为:
audi, apache, asia
答案 1 :(得分:1)
按匹配过滤值,如果没有匹配,请改用所有值,然后输出:
$values = array_filter($readJson, function ($i) { return $i['id'] == $_GET['b']; });
foreach ($values ?: $readJson as $value) {
echo $value['name'];
}
如果$values
为空(== false
),则$values ?: $readJson
会回退到$readJson
,否则会使用$values
。
替代品可能包括echo join(', ', array_column($values ?: $readJson, 'name'))
;取决于您在循环中对这些值的确切需要。
答案 2 :(得分:0)
if(array_search($_GET["b"],array_column($readJson, 'id')) !== False) {
foreach ($readJson as $key => $value){
if($_GET["b"]==$value["id"]){
echo $value["name"];
}
}
}else{
foreach ($readJson as $key => $value){
echo $value["name"];
}
}
答案 3 :(得分:0)
我们首先要设置为所有值的数组,然后在使用该搜索值的键打印该值之后使用array_search
进行检查。如果get值为空则表示打印所有数组值。
像这样检查我添加了样本数组并打印:
$readJson = array(1,2,3,4,5);
$arr = array();
foreach ($readJson as $key => $value){
$arr[] = $value;
}
if($key = array_search($_GET["b"], $arr)){
echo $arr[$key];
}else{
print_r($arr);
}