【问题标题】:execute if statement if a value found in a multidimensional array如果在多维数组中找到值,则执行 if 语句
【发布时间】:2017-06-06 18:44:39
【问题描述】:

我有一段代码,其唯一目的是在多维数组中找到所需的值,如果找到匹配项,则执行 if 语句。

我使用了array_search() 方法,它返回匹配的索引。所以这意味着如果在第一个索引中找到匹配,则返回该索引为 0。根据定义,这是错误的。

所以当在第一个索引中找到匹配时,我的 if 语句没有被执行。如何解决这个问题?

$arr = array(

   0 =>array(
       'name' => 'mr.x',
       'id' => 1
   ),
   1 =>array(
       'name'=>'mr.y',
       'id'  =>2
   )

);

$match = array_search(2,array_column($arr,'id'));

echo $match;

if($match){

    echo 'a match found !';
}

【问题讨论】:

    标签: php search multidimensional-array


    【解决方案1】:

    如果没有找到匹配项,它将返回 false。您需要严格的相等性检查:

    if ($match !== false) {
        echo 'a match found !';
    }
    

    你是对的——因为0 是假的,如果值是数组中的第一个值,你将永远不会进入 if 块。所以你必须检查返回值是否特别为假,而不仅仅是假。

    您可以在PHP documentation regarding array_search 中查看此类示例。

    【讨论】:

    • 如果 $match = 0 会执行吗? (-_-)
    • 是的!只有当$match 实际上是false 时它才会执行
    【解决方案2】:

    您可以使用!=====

    if(($key = array_search( ... )) !== false){
       //do something
    }
    

    【讨论】:

      【解决方案3】:

      您可能希望使用此递归搜索来获取值并执行代码。

      $found = recursive_array_search($search_item, $your_array);
      if ( $found ){
          echo 'a match found !';
      }
      
      function recursive_array_search($needle,$haystack) {
          foreach($haystack as $key=>$value) {
              $current_key=$key;
              if($needle===$value OR (is_array($value) && recursive_array_search($needle,$value) !== false)) {
                  return $current_key;
              }
          }
          return false;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-10-18
        • 2018-10-29
        • 2021-05-16
        • 1970-01-01
        • 1970-01-01
        • 2013-03-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多