从动态数量数量的数量数量中创建一个转移的2D数组(矩阵),这些数组可能无法共享其他数组的所有键

问题描述 投票:0回答:4

$arr1 = array(0 => 12, 5 => 10, 19 => 48); $arr2 = array(0 => 14, 7 => 9, 12 => 11, 19 => 30);

我想合并这些数组,以便我有一组键(0、5、7、12、19),每个点与原始数组中的值相加原始数组中存在:
null

我需要能够为任意数量的数组来执行此操作。我不确定从哪里开始。
我想,我可以通过每个数组迭代,将其值附加到结果上 - 但是我必须检查一下在将当前值附加到该索引之前,我是否有每个结果数组中必需数量的元素效率不高
    

$merge = array(
    0 => array(12, 14),
    5 => array(10, null),
    7 => array(null, 9),
    12 => array(null, 11),
    19 => array(48, 30)
);

为任意数量的阵列进行了修改

$arr1 = array(0 => 12, 5 => 10, 19 => 48); $arr2 = array(0 => 14, 7 => 9, 12 => 11, 19 => 30); $keys = array_merge(array_keys($arr1), array_keys($arr2)); $merged = array(); foreach ($keys as $key) { $merged[$key] = array(); $merged[$key][] = isset($arr1[$key]) ? $arr1[$key] : null; $merged[$key][] = isset($arr2[$key]) ? $arr2[$key] : null; } ksort($merged); echo '<pre>', var_dump($merged), '</pre>';

php arrays matrix multidimensional-array transpose
4个回答
1
投票
eDit

$arrays = array( array(0 => 12, 5 => 10, 19 => 48), array(0 => 14, 7 => 9, 12 => 11, 19 => 30), // ... more arrays ); $keys = array(); foreach ($arrays as $arr) { $keys = array_merge($keys, array_keys($arr)); } $merged = array(); foreach ($keys as $key) { $merged[$key] = array(); foreach ($arrays as $arr) { $merged[$key][] = isset($arr[$key]) ? $arr[$key] : null; } } ksort($merged); echo '<pre>', var_dump($merged), '</pre>';

输出:

1
投票

我认为这就是您想要的。

Array ( [0] => Array ( [0] => 12 [1] => 14 ) [5] => Array ( [0] => 10 [1] => NULL ) [7] => Array ( [0] => NULL [1] => 9 ) [12] => Array ( [0] => NULL [1] => 11 ) [19] => Array ( [0] => 48 [1] => 30 ) )

                
宣传内部的阵列将产生一个平坦的阵列,其中将保留独特的键。

0
投票
/*Merge function*/ function merge($a1, $a2) { foreach($a1 as $key => $val) $a1[$key] = Array($a1[$key], null); foreach($a2 as $key => $val) $a1[$key] = Array((isset($a1[$key]))? $a1[$key][0]: null, $val); return ksort($a1); } /*Test*/ $arr1 = array(0 => 12, 5 => 10, 19 => 48); $arr2 = array(0 => 14, 7 => 9, 12 => 11, 19 => 30); foreach(merge($arr1, $arr2) as $key => $val){ echo "<br />$key --"; print_r($val); } /*output*/ 0 --Array ( [0] => 12 [1] => 14 ) 5 --Array ( [0] => 10 [1] => ) 7 --Array ( [0] => [1] => 9 ) 12 --Array ( [0] => [1] => 11 ) 19 --Array ( [0] => 48 [1] => 30 )

array_replace()
。结果将是一个转移矩阵(每个唯一的列表示为行)。 demo

0
投票
null

恢复:

$arrays = [ [0 => 12, 5 => 10, 19 => 48], [0 => 14, 7 => 9, 12 => 11, 19 => 30], // ... more arrays ]; $result = []; foreach (array_replace(...$arrays) as $key => $_) { foreach ($arrays as $arr) { $result[$key][] = $arr[$key] ?? null; } } ksort($result); var_export($result);

	
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.