Просто интересно, изменил ли кто-нибудь 2-мерный массив на один тусклый массив в php. Я еще не нашел ясного объяснения в php. Любое предложение будет оценено по достоинству.
Попробуй это:
function array_2d_to_1d ($input_array) { $output_array = array(); for ($i = 0; $i < count($input_array); $i++) { for ($j = 0; $j < count($input_array[$i]); $j++) { $output_array[] = $input_array[$i][$j]; } } return $output_array; }
Это может быть полезно для вас, если вы извлекаете значения из Query здесь, вы можете использовать функцию массива, которая будет поддерживать в PHP 5.5+
$myfield_arr = array_column($query_result, 'myfield_name');
Скажи «До свидания»! Наслаждайтесь Smart Code.
вы имеете в виду вот так?
$array = array(array('green', 'yellow', 'orange'), array('blue', 'black', 'white')); $newarray = array(); foreach (array_values($array) as $value){ $newarray[] = $value; }
Это зависит от того, что вам нужно, но если вы хотите уменьшить ваш 2d-массив до кривой 1d, которая заполняет 2d-плоскость, вы, вероятно, ищете пространственный индекс или кривую заполнения пробела. Известны и известны не так, как г-кривая, кривая Гильберта, кривая пеано или кривая мура. Вы можете написать такую кривую с L-системой.
Попробуй это:
function array_to1d($a) { $out = array(); foreach ($a as $b) { foreach ($b as $c) { if (isset($c)) { $out[] = $c; } } } return $out; }
Обратите внимание, что он включает в себя тест, чтобы узнать, установлено ли значение (не null). Массив, который является транспозицией массива с строками переменной длины, будет иметь нулевые значения в некоторых ячейках, и эта проверка может быть полезна, если вы пытаетесь линеаризовать такого зверя.
Решение для прямоугольной 2D-массива действительно просто, но у меня была проблема: мой 2D-массив состоял из 1D массивов разной длины, например:
myArray=array( array(1, 2, 3, 4), array(5, 6, 7), array(8, 9) );
и я придумал более обобщенное решение превратить любой 2D-массив в 1D:
function array2DTo1D($arr2D){ $i=0; $j=0; $arr1D=array(); while (isset($arr2D[$i][0])){ while (isset($arr2D[$i][$j])){ $arr1D[]=$arr2D[$i][$j]; $j++; } $i++;$j=0; } return $arr1D; }