массив один: 1,3,5,7
массив два: 2,4,6,8
массив, который я хочу, будет 1,2,3,4,5,6,7,8
Я просто использую числа в качестве примеров. Если бы это были просто числа, которые я мог бы объединить и отсортировать, но они будут словами. Так может быть, что-то вроде
array one: bob,a,awesome
массив два: is,really,dude
должен читать: bob is a really awesome dude
Не совсем уверен, как это сделать. Есть ли в PHP что-то подобное?
Вы могли бы написать себе такую функцию:
function array_merge_alternating($array1, $array2) { if(count($array1) != count($array2)) { return false; // Arrays must be the same length } $mergedArray = array(); while(count($array1) > 0) { $mergedArray[] = array_shift($array1); $mergedArray[] = array_shift($array2); } return $mergedArray; }
Эта функция ожидает два массива равной длины и объединяет их значения.
Если вам не нужны ваши значения в чередующемся порядке, вы можете использовать array_merge
. array_merge
добавит второй массив к первому и не будет делать то, что вы просите.
Попробуйте это элегантное решение
function array_alternate($array1, $array2) { $result = Array(); array_map(function($item1, $item2) use (&$result) { $result[] = $item1; $result[] = $item2; }, $array1, $array2); return $result; }
Попробуйте эту функцию:
function arrayMergeX() { $arrays = func_get_args(); $arrayCount = count($arrays); if ( $arrayCount < 0 ) throw new ErrorException('No arguments passed!'); $resArr = array(); $maxLength = count($arrays[0]); for ( $i=0; $i<$maxLength; $i+=($arrayCount-1) ) { for ($j=0; $j<$arrayCount; $j++) { $resArr[] = $arrays[$j][$i]; } } return $resArr; } var_dump( arrayMergeX(array(1,3,5,7), array(2,4,6,8)) ); var_dump( arrayMergeX(array('You', 'very'), array('are', 'intelligent.')) ); var_dump( arrayMergeX() );
Он работает с переменным количеством массивов!
На сайте codepad.org: http://codepad.org/c6ZuldEO
если массивы содержат только числовые значения, вы можете использовать merge и отсортировать массив.
<?php $a = array(1,3,5,7); $b = array(2,4,6,8); $merged_array = array_merge($a,$b); sort($merged,SORT_ASC); ?>
иначе используйте это решение.
<?php function my_merge($array1,$array2) { $newarray = array(); foreach($array1 as $key => $val) { $newarray[] = $val; if(count($array2) > 0) $newarray[] = array_shift($array2) } return $newarray; } ?>
надеюсь эта помощь
Это решение работает И не имеет значения, имеют ли оба массива разные размеры / длины:
function array_merge_alternating($array1, $array2) { $mergedArray = array(); while( count($array1) > 0 || count($array2) > 0 ) { if ( count($array1) > 0 ) $mergedArray[] = array_shift($array1); if ( count($array2) > 0 ) $mergedArray[] = array_shift($array2); } return $mergedArray; }
Ожидает, что оба массива имеют одинаковую длину:
$result = array(); foreach ($array1 as $i => $elem) { array_push($result, $elem, $array2[$i]); } echo join(' ', $result);