【问题标题】:comparing nested arrays for equality比较嵌套数组是否相等
【发布时间】:2013-06-06 01:57:35
【问题描述】:

给定以下数组:

$array[0]['tid'] = 'valueX';
$array[1]['tid'] = 'valueY';

$array2[0]['tid'] = 'valueZ';
$array2[1]['tid'] = 'valueY';

我的目标是检查$array 中的任何值是否在$array2

以下是我想出的,但我想知道是否有更简单/更好的解决方案? 可能只获取数组的值或删除 'tid' 键。

foreach($array as $arr) {
    $arr1[] = $arr['tid'];
}

$flag = 0;

foreach($array2 as $arr) {
    if( in_array( $arr['tid'], $arr1 ) ) {
        $flag++;
    }
}
echo $flag; // number of duplicates

【问题讨论】:

    标签: php arrays multidimensional-array


    【解决方案1】:

    一种方法可以解决这个问题:

    $extractor = function($row) { return $row['tid']; };
    echo "Duplicates: ".count(array_intersect(
        array_map($extractor, $array),
        array_map($extractor, $array2)
    ));
    

    这样做是从两个数组的每个数组元素中提取tid 值,然后将结果相交(以查找两个数组中都存在的值)。根据您打算做什么,稍微调整一下或保留中间结果可能是有意义的。

    See it in action.

    【讨论】:

    • 谢谢,太好了!正是我想要的!不知道你可以这样使用函数+1
    【解决方案2】:

    您可以尝试使用array_map 从数组中提取值。

    然后可以使用in_array 函数循环转换后的数组。更好的是,您可以使用array_intersect,它将返回两个转换后的数组共有的元素。

    您可能还会发现flattening 您的数组有时会产生一个快速而肮脏的解决方案,尽管 PHP(据我所知)没有为此的内置函数,链接发布的有几个变体。

    【讨论】:

      【解决方案3】:

      如果您只想有多少与您发布的代码匹配

      您可以尝试使用array_map 来提取值

      array_map(function($array){return $array['tid']}, $inputArray())

      【讨论】:

      • 接受乔恩的回答,他比我先完成 ;-)
      猜你喜欢
      • 2012-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-13
      • 2015-09-16
      相关资源
      最近更新 更多