Php 根据字段将3个数组合并到一个基

Php 根据字段将3个数组合并到一个基,php,arrays,multidimensional-array,Php,Arrays,Multidimensional Array,我有三个阵列(关于数据迁移) 我想要的是将所有$a,$b,$c'合并成一个新数组 在此示例中,值为701的数组是子数组的键70101,70101是子数组的键7010101` 因此,最终的数组可能如下所示: $d = array ( 701=>array( 70101=>array(7010101,7010102), 70102=>array(701020

我有三个阵列(关于数据迁移)

我想要的是将所有
$a
$b
$c'合并成一个新数组
在此示例中,值为
701
的数组是子数组的键
70101
70101
是子数组的键
7010101`

因此,最终的数组可能如下所示:

$d = array (
                 701=>array(
                       70101=>array(7010101,7010102),
                       70102=>array(7010201,7010202),
                     ),
            )

尝试如下所示:

# Your data structure here:
$a = array(
    '701' => 'foo',
    '702' => 'bar',
);

$b = array(
    '70101' => 'foo-foo',
    '70102' => 'foo-bar',
);

$c = array(
    '7010101' => 'foo-foo-foo',
    '7010102' => 'foo-foo-bar',
    '7020101' => 'bar-foo-foo',
    '7020201' => 'bar-bar-foo',
);

# The array you want
$buffer = array();

# Loop through the deepest elements (here: commune)
foreach ($c as $key => $value) {
  # Find the keys for the parent groups
  $province_key = substr($key, 0, 3);
  $district_key = substr($key, 0, 5);

  # Fill the buffer
  $buffer[$province_key][$district_key][$key] = $value; 
}

# Debug: The generated array
echo '<pre>';
print_r($buffer);
echo '</pre>';
#您的数据结构如下:
$a=数组(
'701'=>'foo',
'702'=>'bar',
);
$b=数组(
'70101'=>'foo-foo',
'70102'=>'foo bar',
);
$c=数组(
'7010101'=>'foo foo foo',
'7010102'=>'foo foo bar',
'7020101'=>'bar foo foo',
'7020201'=>'bar-foo',
);
#您想要的阵列
$buffer=array();
#通过最深的元素循环(此处:commune)
foreach($c作为$key=>$value){
#查找父组的键
$province_key=substr($key,0,3);
$district_key=substr($key,0,5);
#填满缓冲区
$buffer[$province\u key][$district\u key][$key]=$value;
}
#调试:生成的数组
回声';
打印(缓冲区);
回声';
您可以复制并粘贴它,然后点击run。

测试数据:

function mergeArraysToOneOnField(array $arrayA, array $arrayB, array $arrayC, $fieldName) {
    $result = [];
    /*
    checks like
        !is_string($fieldName) && !is_integer($fieldName)
    */
    $arrayARelevantFields = array_column($arrayA, $fieldName);
    $arrayBRelevantFields = array_column($arrayB, $fieldName);
    $arrayCRelevantFields = array_column($arrayC, $fieldName);
    foreach ($arrayARelevantFields as $arrayARelevantField) {
        $arrayAFilteredRelevantField = filterArrayByStrpos($arrayBRelevantFields, $arrayARelevantField);
        foreach ($arrayAFilteredRelevantField as $arrayBRelevantField) {
            $result[$arrayARelevantField][$arrayBRelevantField] =
                filterArrayByStrpos($arrayCRelevantFields, $arrayBRelevantField)
            ;
        }
    }
    return $result;
}
解决方案:

$mergedArray = mergeArraysToOneOnField($arrayA, $arrayB, $arrayC, 1);
print_r($mergedArray);
试运行:

Array
(
    [701] => Array
        (
            [70102] => Array
                (
                )

            [70101] => Array
                (
                    [0] => 7010101
                    [1] => 7010102
                )

        )

)
测试结果:

function mergeArraysToOneOnField(array &resultArray, array $inputAarray, $field) {
    ...
}
该解决方案可以通过递归进行扩展,以获得数量可变的输入数组:

$array1 = array("color" => "red", 2, 4);
$array2 = array("a", "b", "color" => "green", "shape" => "trapezoid", 4);
$result = array_merge($array1, $array2);
输出


你的问题是什么?到目前为止你试过什么?如果你的问题是如何做到这一点——我想是这样的——那么你只需在3个数组中循环,并检查(地区、公社)的键包含在上面的类别中,例如,对于一个地区,您将检查密钥是否以与省相同的3位数字开头->如果是:填充缓冲区元素->与公社/地区相同。我正在尝试使用if(strpos($a,'701')!==false){//Do something}您无法在阵列上应用strpos。它用于字符串。它是
数组\u merge(…)
的一个好例子,但不是问题中描述的问题的解决方案-1.
function mergeArraysToOneOnField(array &resultArray, array $inputAarray, $field) {
    ...
}
$array1 = array("color" => "red", 2, 4);
$array2 = array("a", "b", "color" => "green", "shape" => "trapezoid", 4);
$result = array_merge($array1, $array2);
Array ( [color] => green [0] => 2 [1] => 4 [2] => a [3] => b [shape] => trapezoid [4] => 4 )