【问题标题】:search value in multidimensional array在多维数组中搜索值
【发布时间】:2022-01-03 04:34:30
【问题描述】:

我有一个数组并搜索值 100 - 结果应该给我数组的键。像这样工作:

$myArray = array(
        array(
            'score'   => '100',
            'name'    => 'Sam',
            'subject' => 'Data Structures'
        ),
        array(
            'score'   => '200',
            'name'    => 'Tanya',
            'subject' => 'Advanced Algorithms'
        ),
        array(
            'score'   => '300',
            'name'    => 'Jack',
            'subject' => 'Distributed Computing'
        )
    );
      
$id = array_search('100', array_column($myArray, 'score'));

但现在“列”分数也应该是一个数组:

$myArray = array(
        array(
            'score'   => array('100','200'),
            'name'    => 'Sam',
            'subject' => 'Data Structures'
        ),
        array(
            'score'   => array('300','400'),
            'name'    => 'Tanya',
            'subject' => 'Advanced Algorithms'
        ),
        array(
            'score'   => array('500','600'),
            'name'    => 'Jack',
            'subject' => 'Distributed Computing'
        )
    );

但现在我的 array_search 部分不起作用。 我该如何解决这个问题?

【问题讨论】:

  • 你需要写一个循环,这个没有内置函数。
  • foreach (array_column($myArray, 'score') => $index => $array) ...
  • 第一个 =>as : foreach (array_column($myArray, 'score') as $index => $array) ... @barmar

标签: php arrays


【解决方案1】:

这与您的第一个块的工作方式完全相同

$id = array_search(100, array_merge(array_column(array_column($myArray, 'score'), 0), array_column(array_column($myArray, 'score'), 1)));

或者你可以这样写以提高可读性

$tempArray1 = array_column(array_column($myArray, 'score'), 0);
$tempArray2 = array_column(array_column($myArray, 'score'), 1);
$myArray2 = array_merge($tempArray1, $tempArray2);
    

      
$id = array_search('100', $myArray2);

【讨论】:

  • 非常感谢!!你让我今天一整天都感觉很好 ! :)
【解决方案2】:

您可以使用array_filter,然后在scores 键上使用in_array,从而返回值为100 的数组。

array_filter($myArray, fn($v) => in_array(100, $v['score']));

输出:

array(1) {
  [0]=>
  array(3) {
    ["score"]=>
    array(2) {
      [0]=>
      string(3) "100"
      [1]=>
      string(3) "200"
    }
    ["name"]=>
    string(3) "Sam"
    ["subject"]=>
    string(15) "Data Structures"
  }
}

See it working over at 3v4l

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-20
    • 2017-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多