如何均匀合并这两个数组?谢谢。
$array1 = ['1','3','5'];
$array2 = ['2','4','6'];
// Output
['1','2','3','4','5','6']
我目前的做法
$items = [];
$totalItem = count($array1) + count($array2);
while ($totalItem > 0) {
if (count($array1) > 0) {
array_push($items, array_shift($array1));
}
if (count($array2) > 0) {
array_push($items, array_shift($array2));
}
$totalItem -= 1;
}
我实际上正在寻找一种更有效的方法。提前感谢你们提出的任何想法: - )
答案 0 :(得分:1)
合并它们并使用asort如果您的值有一定程度的复杂性。
Stream<Byte>
答案 1 :(得分:1)
如果这些数组可以有不同的大小,有自定义键等,如果['1','2','3','4','5','6']
只是一个简单的示例,值可以是任何类型的数据,请执行以下操作:
$result = [];
// Get rid of custom keys
$array1 = array_values($array1);
$array2 = array_values($array2);
$arrayCount = max(count($array1), count($array2));
for ($i = 0; $i < $arrayCount; $i++) {
if (isset($array1[$i]) {
$result = $array1[$i];
}
if (isset($array2[$i]) {
$result = $array2[$i];
}
}
答案 2 :(得分:0)
如果您正在使用数组,则可以使用
sort(array_merge($array1, $array2))
如果您正在使用Laravel,我强烈建议您查看Collections
(可在此处找到文档https://laravel.com/docs/5.6/collections)。
使用集合,您可以调用
$collection1->merge($collection2)->sort();
您甚至可以将匿名函数作为参数传递给集合进行更复杂的排序。
$collection1->merge($collection2)->sort(function($a, $b) {
if ($a == $b) {
return 0;
}
return ($a < $b) ? -1 : 1;
})
答案 3 :(得分:0)
所以,我不确定你是想要array_merge(); sort();
还是'按照关键的顺序合并值'这样的答案,所以这两者都是。
首先简单,'合并 - &gt;排序'例子
$array1 = array('1', '5', '3');
$array2 = array('2', '4', '6');
// Perform a standard merge
$array = array_merge ($array1, $array2);
// $array looks like this:
// $array = ['1', '5', '3', '2', '4', '6'];
// So sort it.
sort($array);
// And we get the following, note it will lose the key order.
// $array = ['1', '2', '3', '4', '5', '6'];
如果要在'key - &gt;中合并数组数组编号'顺序然后你可以做这样的事情:
function merge($array1, $array2) {
$arrays = func_get_args();
$lengths = array();
$output = array();
// First find the longest array.
foreach ($arrays as $key => $array) {
// Remove the keys.
$arrays[$key] = array_values($array);
// Find the length.
$lengths[] = count($array);
}
// Get the dimensions.
$length = max($lengths);
$count = count($arrays);
// For each element (of the longest array)
for ($x = 0; $x < $length; $x++)
// For each array
for ($y = 0; $y < $count; $y++)
// If the value exists
if (isset($arrays[$y][$x]))
// Add it to the output
$output[] = $arrays[$y][$x];
return $output;
}
$array1 = array('1', '5', '3');
$array2 = array('2', '4', '6');
$array = merge($array1, $array2);
/* Output:
Array
(
[0] => 1
[1] => 2
[2] => 5
[3] => 4
[4] => 3
[5] => 6
)
*/
$array3 = array('a', 't', 'u', 'i', 'w');
$array = merge($array1, $array2, $array3);
/* Output:
Array
(
[0] => 1
[1] => 2
[2] => a
[3] => 5
[4] => 4
[5] => t
[6] => 3
[7] => 6
[8] => u
[9] => i
[10] => w
)
*/
我将以“我没有尝试过这段代码”来说明这一点,但它应该“尽我所能”。