Объединить все остальные массивы php

массив один: 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);