2d многомерный массив в 1d массив в php - PullRequest
3 голосов
/ 02 августа 2011

Просто интересно, кто-нибудь преобразовал массив 2 dim в массив dim в php. Я еще не нашел четкого объяснения в php. Любое предложение будет оценено.

Ответы [ 6 ]

7 голосов
/ 02 августа 2011

Попробуйте это:

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;
}
6 голосов
/ 09 марта 2017

Это может быть полезно для вас, если вы выбираете значения из Query, вы можете использовать функцию массива, которая будет поддерживать в PHP 5.5 +

$myfield_arr = array_column($query_result, 'myfield_name');

Скажите до свидания циклу!Наслаждайтесь умным кодом.

1 голос
/ 24 июля 2014

Попробуйте это:

function array_to1d($a) {
    $out = array();
    foreach ($a as $b) {
        foreach ($b as $c) {
            if (isset($c)) {
                $out[] = $c;
            }
        }
    }
    return $out;
}

Обратите внимание, что он включает в себя тест, чтобы увидеть, установлено ли значение (не ноль).Массив, который является транспонированным массива со строками различной длины, будет иметь нулевые значения в некоторых ячейках, и эта проверка может быть полезна, если вы пытаетесь линеаризовать такого зверя.

1 голос
/ 02 августа 2011

Это зависит от того, что вам нужно, но если вы хотите уменьшить свой 2d массив до 1d кривой, которая полностью заполняет 2d плоскость, которую вы, вероятно, ищете пространственный индекс или кривую заполнения пространства. Есть некоторые известные и не очень известные, такие как z-кривая, кривая Гильберта, кривая Пеано или кривая Мура. Вы можете написать такую ​​кривую с L-системой.

1 голос
/ 02 августа 2011

Вы имеете в виду, как это?

$array = array(array('green', 'yellow', 'orange'), array('blue', 'black', 'white'));
$newarray = array();
foreach (array_values($array) as $value){
   $newarray[] = $value; 
}
0 голосов
/ 17 февраля 2016

Решение для прямоугольного 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;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...