如何有条件地回显多维数组的一列或所有值?

时间:2018-02-14 11:28:22

标签: php multidimensional-array

我使用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回应它?有什么建议吗?

4 个答案:

答案 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);
        }