我需要将几个数组合并成一个数组。描述我正在寻找的最好方法是将这些数组“交错”成单个数组。将多个数组交织到一个数组中
例如从数组#1中取项目1并追加到最终数组。从数组#2获取项目1并追加到最终数组。从数组#1获取项目2并追加...等。
最终阵列会是这个样子:
阵列#1.element#1 阵列#2.element#1 。 。 。
“踢球者”是各个阵列可以有不同的长度。
是否有更好的数据结构使用?
我需要将几个数组合并成一个数组。描述我正在寻找的最好方法是将这些数组“交错”成单个数组。将多个数组交织到一个数组中
例如从数组#1中取项目1并追加到最终数组。从数组#2获取项目1并追加到最终数组。从数组#1获取项目2并追加...等。
最终阵列会是这个样子:
阵列#1.element#1 阵列#2.element#1 。 。 。
“踢球者”是各个阵列可以有不同的长度。
是否有更好的数据结构使用?
例如,
function array_zip_merge() {
$output = array();
// The loop incrementer takes each array out of the loop as it gets emptied by array_shift().
for ($args = func_get_args(); count($args); $args = array_filter($args)) {
// &$arg allows array_shift() to change the original.
foreach ($args as &$arg) {
$output[] = array_shift($arg);
}
}
return $output;
}
// test
$a = range(1, 10);
$b = range('a', 'f');
$c = range('A', 'B');
echo implode('', array_zip_merge($a, $b, $c)); // prints 1aA2bB3c4d5e6f78910
我只是使用array_merge()
,但这显然取决于你究竟做了什么。
这会将这些数组附加到对方,而元素只有在具有相同的非数字键时才会被替换。这对你来说可能不是问题,或者可能因为属性顺序而被解决,因为第一个数组元素的内容将被后面的元素覆盖。
如果您有n个数组,则可以使用SortedList,并使用arrayIndex * n + arrayNumber
作为排序索引。
如果阵列中只有数字键,这里有一个简单的解决方案:
$longest = max(count($arr1), count($arr2));
$final = array();
for ($i = 0; $i < $longest; $i++)
{
if (isset($arr1[$i]))
$final[] = $arr1[$i];
if (isset($arr2[$i]))
$final[] = $arr2[$i];
}
如果命名键,你可以使用array_keys
功能为每个阵列和循环而不是通过一系列的键。如果你想要两个以上的数组(或可变数量的数组),那么你可以使用嵌套循环(尽管我认为你需要将$arr[0]
和$arr[1]
作为单独的数组)。
请进一步解释如何在阵列具有不同长度的情况下期待您的结果。如果其中一个阵列到达最后一个元素,或者是否希望剩余阵列继续交错直到所有阵列都达到其最后一个元素,您会停止交错吗? – Oskar 2009-12-07 15:07:15