php 多维数组的差集以及将多维数组元素返回成一维数组

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php 多维数组的差集以及将多维数组元素返回成一维数组相关的知识,希望对你有一定的参考价值。

<?php
$a1 = array( 
    "a1" => 1, 
    "a3" => array( 
        "a31" => 31 
    ), 
    "a4" => array( 
        "a41" => 41 
    ), 
    "a5" => 5 
); 

// ARRAY 2 
$a2 = array( 
    "a1" => 1, 
    "a2" => 2, 
    "a3" => array( 
        "a31" => 31, 
        "a32" => array( 
            "a321" => 321, 
            "a322" => 322 
        ) 
    ), 
    "a4" => array( 
        "a41" => 42 
    ), 
    "a5" => array( 
        "a51" => 51, 
        "a52" => 52 
    ) 
); 

//多维数组的差集
function array_diff_assoc_recursive($array1,$array2){
    $diffarray=array();
    foreach ($array1 as $key=>$value){
        //判断数组每个元素是否是数组
        if(is_array($value)){
            //判断第二个数组是否存在key
            if(!isset($array2[$key])){
                $diffarray[$key]=$value;
                //判断第二个数组key是否是一个数组
            }elseif(!is_array($array2[$key])){
                $diffarray[$key]=$value;
            }else{
                $diff=array_diff_assoc_recursive($value, $array2[$key]);
                if($diff!=false){
                    $diffarray[$key]=$diff;
                }
            }
        }elseif(!array_key_exists($key, $array2) || $value!==$array2[$key]){
            $diffarray[$key]=$value;
        }
    }
    return $diffarray;
}

print_r(array_diff_assoc_recursive($a1,$a2));
print_r(array_diff_assoc_recursive($a2,$a1));
?>



/*
* 返回多维数组里的一维数组元素
* @author MAGENJIE(magenjie@variflight.com)
* @datetime 2019-04-18T14:38:31+0800
* $a = [ 'a' => ['b' => ['c','e','f']], 'd' => ['11','22','33'], 'g' => 'xxx'];
* $b = array_element_recursive($a);
* var_dump($b);
* array(3) {
  [0]=>
  array(3) {
    [0]=>
    string(1) "c"
    [1]=>
    string(1) "e"
    [2]=>
    string(1) "f"
  }
  [1]=>
  array(3) {
    [0]=>
    string(2) "11"
    [1]=>
    string(2) "22"
    [2]=>
    string(2) "33"
  }
  [2]=>
  string(3) "xxx"
* }*/
if (!function_exists('array_element_recursive')) {
    function array_element_recursive($array, &$return = []){
        foreach ($array as $key => $value) {
            if (is_array($value)) {
                if (count($value) === count($value, 1)) {
                    $return[] = $value;
                }else{
                    array_element_recursive($value, $return);
                }
            }else{
                $return[] = $value;
            }   
        }
        return $return;
    }
}

以上是关于php 多维数组的差集以及将多维数组元素返回成一维数组的主要内容,如果未能解决你的问题,请参考以下文章

PHP多维数组转一维数组

PHP获取两个多维数组的差集

PHP获取两个多维数组的差集

在php中将一维数组转换为多维数组[重复]

php中一维或多维数组去除重复项

php 一个多维数组根据一维数组筛选数据,得到新数组