2

I have an array:

Array
(
    [0] => Array
        (
            [2010] => 2010
        )

    [1] => Array
        (
            [2011] => 2011
        )

    [2] => Array
        (
            [2012] => 2012
        )

    [3] => Array
        (
            [2013] => 2013
        )

    [4] => Array
        (
            [2014] => 2014
        )

    [5] => Array
        (
            [2015] => 2015
        )

    [6] => Array
        (
            [2016] => 2016
        )

)

Which I want to convert into

array(
[2010] => 2010
[2011] => 2011
[2012] => 2012
)

I have written an function like this:

foreach($arr as $a)
{
   foreach($a as $k=>$sub)
   {
      $newArr[$k] = $sub;
   }
}

Am I doing it right?

Saswat
  • 12,320
  • 16
  • 77
  • 156

3 Answers3

1

Keep in mind What's the difference between array_merge and array + array?

Using the += on an "endresult" array will add the given array into the current array. There are some caveats as explained in the link above to be mindful of in case of overlapping keys.

$arr = [[2012 => 'foo'],[2014 => 'bar'],[2015=>'baz']];
$new = [];
foreach($arr as $i) {
  $new += $i;
}
echo "<PRE>";
var_dump($new);

Live sampe: https://ideone.com/olydNq

Community
  • 1
  • 1
Tschallacka
  • 27,901
  • 14
  • 88
  • 133
0

Please try this

$array = Array
(
    '0' => Array
        (
            '2010' => 2010,
        ),

    '1' => Array
        (
            '2011' => 2011,
        ),

    '2' => Array
        (
            '2012' => 2012,
        ),

    '3' => Array
        (
            '2013' => 2013,
        ),

    '4' => Array
        (
            '2014' => 2014,
        ),

    '5' => Array
        (
            '2015' => 2015,
        ),

    '6' => Array
        (
            '2016' => 2016,
        ),

);

$oneDimensionalArray = call_user_func_array('array_merge', $array);
foreach($oneDimensionalArray as $_oneDimensionalArray)
{
     $newArr[$_oneDimensionalArray] = $_oneDimensionalArray;
}   
print_r($newArr)
Manish Jesani
  • 1,339
  • 5
  • 20
  • 36
0

Please check this code, it works in unformulated array structure also

<?php
$array = array
(
    'aaaaa',
    10,
    '0' => array
        (
            '2010' => 2010,
        ),

    '1' => array
        (
            '2011' => 2011,
        ),

    '2' => array
        (
            '2012' => 2012,
        ),

    '3' => array
        (
            '2013' => 2013,
        ),

    '4' => array
        (
            '2014' => 2014,
        ),

    '5' => array
        (
            '2015' => 2015,
        ),

    '6' => array
        (
            '2016' => 2016,
            '2017' => 2017,
            'xxxx' => 'yyyy',
        ),

);



$newArr=array();



function walk_first($val, $key)
{
    if(is_array($val))
    {
    array_walk($val, 'walk_second');
    }
}
function walk_second($val, $key)
{
    global $newArr;
    $newArr[$key]=$val;
}
array_walk($array, 'walk_first');

print_r($newArr);
?>
Haresh Vidja
  • 8,340
  • 3
  • 25
  • 42