복붙노트

다차원 배열을 1 차원 배열로 바꾸기

PHP

다차원 배열을 1 차원 배열로 바꾸기

나는 잠시 동안 이것에 나의 머리를 세게 치고 있었다.

이 다차원 배열이 있습니다.

Array
(
    [0] => Array
        (
            [0] => foo
            [1] => bar
            [2] => hello
        )

    [1] => Array
        (
            [0] => world
            [1] => love
        )

    [2] => Array
        (
            [0] => stack
            [1] => overflow
            [2] => yep
            [3] => man
        )

그리고 나는 이것을 얻을 필요가있다.

Array
(
    [0] => foo
    [1] => bar
    [2] => hello
    [3] => world
    [4] => love
    [5] => stack
    [6] => overflow
    [7] => yep
    [8] => man
)

어떤 아이디어?

다른 모든 솔루션은 다른 키를 사용하여 다차원 배열을 해결합니다. 내 배열은 간단한 숫자 키만 사용합니다.

해결법

  1. ==============================

    1.

    array_reduce($array, 'array_merge', array())
    

    예:

    $a = array(array(1, 2, 3), array(4, 5, 6));
    $result = array_reduce($a, 'array_merge', array());
    

    결과:

    array[1, 2, 3, 4, 5, 6];
    
  2. ==============================

    2.PHP array_mergeDocs 함수는 배열을 평평하게 할 수 있습니다 :

    PHP array_mergeDocs 함수는 배열을 평평하게 할 수 있습니다 :

    $flat = call_user_func_array('array_merge', $array);
    

    원래 배열의 깊이가 2보다 큰 경우 PHP의 SPL에는 평평하게 만드는 데 사용할 수있는 RecursiveArrayIterator가 있습니다.

    $flat = iterator_to_array(new RecursiveIteratorIterator(new RecursiveArrayIterator($array)), 0);
    

    다음을 참조하십시오 : 다차원 배열을 평평하게 만드는 방법?.

  3. ==============================

    3.이것은 정말로 거기에있는 모든 것입니다 :

    이것은 정말로 거기에있는 모든 것입니다 :

    foreach($array as $subArray){
        foreach($subArray as $val){
            $newArray[] = $val;
        }
    }
    
  4. ==============================

    4.

    foreach ($a as $v1) {
        foreach ($v1 as $v2) {
            echo "$v2\n";
        }
    }
    

    여기서 $ a는 배열 이름입니다. 자세한 내용은

  5. ==============================

    5.PHP 5.3에서 가장 짧은 해결책은 새로운 closure 구문을 가진 array_walk_recursive () 인 것 같습니다 :

    PHP 5.3에서 가장 짧은 해결책은 새로운 closure 구문을 가진 array_walk_recursive () 인 것 같습니다 :

    function flatten(array $array) {
        $return = array();
        array_walk_recursive($array, function($a) use (&$return) { $return[] = $a; });
        return $return;
    }
    
  6. ==============================

    6.PHP 5.6부터는 언 패킹 인수로 더 간단하게 수행 할 수 있습니다.

    PHP 5.6부터는 언 패킹 인수로 더 간단하게 수행 할 수 있습니다.

    $flat = array_merge(...$array);
    
  7. ==============================

    7.PHP5.6에서는이 문제를 해결하기 위해 다른 방법으로 함수를 결합하여 array_shift ()를 호출하여 원래 배열의 첫 번째 요소 인 array_pus ()를 제거하고 새로운 배열을 추가합니다. 중요한 것은 ... splapt / elipse 연산자를 사용하면 array_shitf ()가 인수처럼 반환됩니다.

    PHP5.6에서는이 문제를 해결하기 위해 다른 방법으로 함수를 결합하여 array_shift ()를 호출하여 원래 배열의 첫 번째 요소 인 array_pus ()를 제거하고 새로운 배열을 추가합니다. 중요한 것은 ... splapt / elipse 연산자를 사용하면 array_shitf ()가 인수처럼 반환됩니다.

    <?php
    
    $arr = [
            ['foo', 'bar', 'hello'],
            ['world', 'love'],
            ['stack', 'overflow', 'yep', 'man', 'wow']
        ];
    
    $new = [];
    while($item = array_shift($arr)){
        array_push($new, ...$item);
    }
    
    print_r($new);
    

    산출:

    Array
    (
        [0] => foo
        [1] => bar
        [2] => hello
        [3] => world
        [4] => love
        [5] => stack
        [6] => overflow
        [7] => yep
        [8] => man
        [9] => wow
    )
    

    보기 - ideone

  8. ==============================

    8.동일한 유형의 문제를 해결하기 위해이 코드를 사용했습니다. 그래서 당신도 이것을 시도 할 수 있습니다.

    동일한 유형의 문제를 해결하기 위해이 코드를 사용했습니다. 그래서 당신도 이것을 시도 할 수 있습니다.

    function array_flatten($array) { 
    
     if (!is_array($array))  
    { 
      return FALSE;  
    }  
      $result = array(); 
    foreach ($array as $key => $value)
    {
      if (is_array($value))  
      {
       $result = array_merge($result, array_flatten($value));
      } 
      else  {
      $result[$key] = $value;   
      }  
    }   
    return $result; 
    } 
    
  9. ==============================

    9.

    $blocked_dates = array(
                        '2014' => Array
                            (
                                '8' => Array
                                    (
                                        '3' => '1',
                                        '4' => '1',                                     
                                        '6' => '1',                                     
                                        '10' => '1',
                                        '15' => '1',
                                        '25' => '1'
    
                                    )
    
                            ),
                        '2015' => Array
                            (
                                '9' => Array
                                    (
                                        '3' => '1',
                                        '4' => '1',                                    
                                        '6' => '1',                                     
                                        '10' => '1',
                                        '15' => '1',
                                        '25' => '1'
    
                                    )
    
                            )    
    
                    );
    

    결과 (한 차원 입체 배열) :

    $unavailable_dates = array();
    foreach ($blocked_dates as $year=>$months) {
    
        foreach ($months as $month => $days) {
    
            foreach ($days as $day => $value) {
    
                array_push($unavailable_dates,"$year-$month-$day");
            }
    
        }
    }
    
    
    
    $unavailable_dates = json_encode($unavailable_dates);
    print_r($unavailable_dates);
    
    OUTPUT : ["2014-8-3","2014-8-4","2014-8-6","2014-8-10","2014-8-15","2014-8-25","2015-9-3","2015-9-4","2015-9-6","2015-9-10","2015-9-15","2015-9-25"]
    
  10. ==============================

    10.이렇게하면 array_walk_recursive ($ array, function ($ a) use (& $ return) {$ return [] = $ a;});

    이렇게하면 array_walk_recursive ($ array, function ($ a) use (& $ return) {$ return [] = $ a;});

  11. from https://stackoverflow.com/questions/8611313/turning-multidimensional-array-into-one-dimensional-array by cc-by-sa and MIT license