【问题标题】:Some php coding about array_search with unexpected result一些关于 array_search 的 php 编码,结果出乎意料
【发布时间】:2020-01-06 06:03:07
【问题描述】:

我想从一个数组中找到一个键值,如果不存在则插入一个数组集合到一个数组列表中

如果我搜索蓝色,它将返回 Y 但如果我搜索绿色,返回 N

$people = array(
  0 => array(
'name' => 'John',
'fav_color' => 'green'
 ),
1=> array(
  'name' => 'Samuel',
  'fav_color' => 'blue'
)
);
$found_key = array_search('green', array_column($people, 'fav_color'));

if($found_key){
    print_r("Y");
}else{
    print_r("N");
}

期望搜索蓝色或绿色返回 Y

【问题讨论】:

  • $peoplearray 的键是包含值01

标签: php arrays laravel multidimensional-array


【解决方案1】:

你也可以使用in_array()函数。

$people = array(
        0 => array(
      'name' => 'John',
      'fav_color' => 'green'
       ),
      1=> array(
        'name' => 'Samuel',
        'fav_color' => 'blue'
      )
      );

      $found_key = in_array('green', array_column($people, 'fav_color'));
      if($found_key){
          print_r("Y");
      }else{
          print_r("N");
      }

【讨论】:

    【解决方案2】:

    根据array_search文档中的说明:

    警告:此函数可能返回布尔值 FALSE,但也可能返回 计算结果为 FALSE 的非布尔值。请阅读关于 Booleans 了解更多信息。使用the === operator来测试这个函数的返回值。

    在您的情况下,green 值的索引为 0。在 if 语句中,0 表示错误。为了解决这个问题,您需要对array_search返回的值进行严格的类型检查,如下所示。

    if ($found_key !== false) { // strict type check
        print_r("Y");
    } else {
        print_r("N");
    }
    

    Demo

    【讨论】:

      猜你喜欢
      • 2021-03-25
      • 2014-04-02
      • 1970-01-01
      • 2016-09-03
      • 1970-01-01
      • 1970-01-01
      • 2011-11-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多