【问题标题】:Select common arrays from two mutidimension arrays - PHP从两个多维数组中选择常用数组 - PHP
【发布时间】:2026-01-30 20:15:01
【问题描述】:

我的第一个数组是

Array (
 [0] => Array
     (
         [user_id] => 1
         [name] => name1
     )

 [1] => Array
     (
        [user_id] => 2
        [name] => name2
    )
)


我的 Secondarray 是

Array (
 [0] => Array
     (
         [user_id] => 2
         [name] => name2
     )

 [1] => Array
     (
        [user_id] => 3
        [name] => name3
    )
)

常见的数组是user_id=2的数组如何选择该数组?
我想要这两个数组的交集。

【问题讨论】:

  • @asprin 当没有公共数组时,仍然显示第一个数组的结果...为什么?
  • @FrancisMV123 因为这是 array_intersect() 的行为:返回一个数组,其中包含 array1 中的所有值,其值存在于所有参数中。
  • @Starlays 如果没有通用数组,那么我想要空数组...帮助我。

标签: php multidimensional-array array-intersect


【解决方案1】:
<?php
$array1 = array(
    array(
        'user_id' => 1,
        'name'    => 'foo'
     ), 
    array(
        'user_id' => 2,
        'name'    => 'foobar'
    )
);
$array2 = array(
    array(
        'user_id' => 2,
        'name'    => 'foobar'
    ), 
    array(
       'user_id' => 3,
       'name'    => 'baz'
    )
);

/**
 * Return the common sub_array of tow arrays with tow dimensions
 *
 * @param $arrayA - the first tow dimension array
 * @param $arrayB - the second tow dimension array
 *
 * @return array - an empty array in case the tow arrays don't
 * have any common elements, otherwise an tow dimension array
 * containing the common elements
 */
function get_common_array($arrayA, $arrayB) {
    $result = array();

    foreach($arrayA as $keyA=>$sub_arrayA) {
        foreach($sub_arrayA as $metadata=>$data) {
            if('user_id' === $metadata) {
                foreach($arrayB as $keyB=>$sub_arrayB){
                   if(in_array($data, $sub_arrayB)) {
                        $result[] = $sub_arrayB;
                    }
                }
            }
        } 
    }

    return $result;
}

var_dump(get_common_array($array1, $array2));

这是一种解决方法,但如果我考虑改变拖曳数组的几何形状,以便能够使用 PHP 中实现的专用函数,那么这会更快。

【讨论】: