【问题标题】:Find value in multi dimensional array using PHP array_column使用 PHP array_column 在多维数组中查找值
【发布时间】:2020-02-15 05:49:36
【问题描述】:

您好,是否可以使用以下方法在多维数组中找到一个值:

$array = [['a', 'b', 'c'], ['x', 'y', 'z']];
$key = array_search('y', array_column($array , array_search('y', current($array))));

虽然我可以使用 for() 循环来遍历它并找到值,但我正在尝试看看是否有办法将其作为一个单行来执行。

到目前为止,我一直坚持 array_search() 返回 false,应该只返回 int

【问题讨论】:

  • 你的问题不清楚,补充一些解释。
  • 因为它是一个多维数组,这需要 2 个数字来标识位置(在这种情况下为 1,1),那么如何仅使用 1 个值来做到这一点?
  • @jibsteroos 为复制过去的错误道歉
  • @NigelRen,很好,我会稍微调整一下并发布更新

标签: php arrays string multidimensional-array match


【解决方案1】:

你可以使用array_walk_recursive

$array  = [['a', 'b', 'c'], ['x', 'y', 'z']];
$findme = 'y';
$key    = null;
array_walk_recursive($array, function($v, $k) use($findme, &$key){
  if($v === $findme) $key = $k;
});
echo $key;

工作示例:https://3v4l.org/GUqGH


如果您需要两个密钥,请使用array_walk

 array_walk($array, function($v , $k) use (&$keys, $findme){
    $found = array_search($findme, $v);
    isset($found) ? ($keys = [$k, $found]) : '';
 }); 
 print_r($keys);

工作示例:https://3v4l.org/U6bhn

【讨论】:

  • @JellyBean 很高兴为您提供帮助!
  • 将我的子数组扩展为 6 并更改了 y 的位置,您的第二个示例仅在您要查找的针位于最后一个子数组中时才有效,忙于寻找一种方法使其正常工作y的位置
  • @JellyBean 用输入数组更新问题
  • 抱歉耽搁了,您应该可以使用数组进行测试,因为只需更改针/搜索变量
【解决方案2】:

你可以使用foreach来搜索所有的目标值,

$search = "y";
$keys = [];
$array = [['a', 'b', 'c'], ['x', 'y', 'z']];
foreach($array as $row_index => $value){
    foreach($value as $col_index => $v){
        if($search == $v){
            $keys[] = array(
                "row_index" => $row_index,
                "col_index" => $row_index
            );
        }
    }
}

【讨论】:

  • 虽然我可以使用 for() 循环遍历它并找到值,但我想看看是否有办法作为 one liner.
  • 无论选择哪种方式,都必须遍历所有值。
  • array_walk_recursive 也迭代所有值。同array_column, array_search
【解决方案3】:

array_column 检索与您插入的键匹配的整个数组。在这里,您似乎正在尝试获取值的行和列索引。

你可以这样做

$array = [['a', 'b', 'c'], ['x', 'y', 'z']];
for( $i = 0; $i < count( $array ); $i++ ){
    $key = array_search( 'y', $array[ $i ] );
    if( $key ) {
        echo "Row: ". $i . " Key: " . $key . "<br />";
    }
}

进一步的实施取决于您的要求。

【讨论】:

    猜你喜欢
    • 2014-12-13
    • 1970-01-01
    • 2013-10-14
    • 1970-01-01
    • 1970-01-01
    • 2013-03-15
    • 2014-05-11
    • 2014-10-14
    • 1970-01-01
    相关资源
    最近更新 更多