PHP检查值是否存在并返回多维数组中给定值的完整行

时间:2018-01-13 01:30:33

标签: php arrays multidimensional-array

如何检查值是否存在并在多维数组中返回给定值的完整行?

$userdb = Array
(
    (0) => Array
        (
          '100',
           'Sandra',
           'urlof100'
        ),

    (1) => Array
        (
            '5465',
            'Stefanie',
            'urlof5465'
        ),

    (2) => Array
        (
            '40489',
            'Michael',
            'urlof40489'
        )
);

例如。检查Sandra是否在数组中。 是Sandra在数组中,行是0

(0) => Array
        (
             '100',
            'Sandra',
              'urlof100'
        )

我得到第一部分:

if (in_array("Sandra", array_column($userdb, 1))) {
    // echo "FOUND";
 }

但是我无法理解如何获得Sandra所属的阵列。

2 个答案:

答案 0 :(得分:0)

OP的问题与PHP手册中的评论有着惊人的相似之处;见here。也就是说,您可以通过以下编码解决问题:

<?php
$userdb = [
        [
          '100',
           'Sandra',
           'urlof100'
        ],

        [  '5465',
            'Stefanie',
            'urlof5465'
        ],

        [   '40489',
            'Michael',
            'urlof40489'
        ]
];

function getRow($find,$db,$col){
  $key = array_search($find, array_column($db, $col));
  if ($key !== false) {
     echo "Yes, \"$find\" is in array in row $key\n";
  }
  return $db[$key];
}
$row = getRow('Sandra',$userdb,1);
print_r($row);

请参阅live code

传递给array_column()的第二个参数是1,因为所有名称都存储在第1列中。一旦array_search()找到&#34; Sandra&#34;它返回行号。

如果您不知道列信息,可以同时获取行和列,如下所示:

<?php
array_walk($userdb, function($e,$i) {
      if (in_array("Sandra",$e)) {
             $k = array_search('Sandra',$e);
             echo "Yes, \"Sandra\" is in array at row $i and column $k\n";
      }
});

请参阅live code

使用array_walk()可以简化代码,使其更易于掌握。 Array_walk()将回调应用于数组的每个成员。

最后,您可以使用显式迭代来获取行信息,如下所示:

<?php
foreach($userdb as $k => $v) {
    if (is_array($v) && in_array('Sandra',$v)) {
       echo "Yes, \"Sandra\" in array at row $k\n";
    }
}

请参阅live code

答案 1 :(得分:0)

你有一个多维数组。所以你可以使用foreach循环来获取密钥。像foreach($ array as $ key =&gt; $ val){ 如果找到echo $ key,请在此处查看数组 } 它应该工作。