У меня есть следующие массивы:
$front = array("front_first","front_second"); $inside = array("inside_first", "inside_second", "inside_third"); $back = array("back_first", "back_second", "back_third","back_fourth");
то, что мне нужно сделать, это объединить его, чтобы результат выглядел так, как показано выше. Порядок вывода всегда заключается в том, чтобы привести их в порядок back, front, inside
:
$final = array( "back_first", "front_first", "inside_first", "back_second", "front_second", "inside_second", "back_third", "front_second", "inside_third", "back_fourth", "front_second", "inside_third" );
Таким образом, в основном он смотрит на три массива, и в зависимости от того, какой массив имеет меньше значений, он будет повторно использовать последнее значение несколько раз, пока он не будет прокручиваться через оставшиеся ключи в более длинных массивах.
Есть ли способ сделать это? Я в тупике /
$front = array("front_first","front_second"); $inside = array("inside_first", "inside_second", "inside_third"); $back = array("back_first", "back_second", "back_third","back_fourth"); function foo() { $args = func_get_args(); $max = max(array_map('sizeof', $args)); // credits to hakre ;) $result = array(); for ($i = 0; $i < $max; $i += 1) { foreach ($args as $arg) { $result[] = isset($arg[$i]) ? $arg[$i] : end($arg); } } return $result; } $final = foo($back, $front, $inside); print_r($final);
демонстрация
http://codepad.viper-7.com/xpwGha
PHP
$front = array("front_first", "front_second"); $inside = array("inside_first", "inside_second", "inside_third"); $back = array("back_first", "back_second", "back_third", "back_fourth"); $combined = array_map("callback", $back, $front, $inside); $lastf = ""; $lasti = ""; $lastb = ""; function callback($arrb, $arrf, $arri) { global $lastf, $lasti, $lastb; $lastf = isset($arrf) ? $arrf : $lastf; $lasti = isset($arri) ? $arri : $lasti; $lastb = isset($arrb) ? $arrb : $lastb; return array($lastb, $lastf, $lasti); } $final = array(); foreach ($combined as $k => $v) { $final = array_merge($final, $v); } print_r($final);
Вывод
Array ( [0] => back_first [1] => front_first [2] => inside_first [3] => back_second [4] => front_second [5] => inside_second [6] => back_third [7] => front_second [8] => inside_third [9] => back_fourth [10] => front_second [11] => inside_third )