PHP add elements to multidimensional array with array_push
Asked Answered
A

4

73

I have a multidimensional array $md_array and I want to add more elements to the sub-arrays recipe_type and cuisine coming from a loop that reads data from a table.

In the loop, I create a new table $newdata for each row:

$newdata =  array (
          'wpseo_title' => 'test',
          'wpseo_desc' => 'test',
          'wpseo_metakey' => 'test'
        );

and then, using array_push() I need to append the $newdata arrays to the following multidimensional array:

$md_array= array (
     'recipe_type' => 
      array (
        18 => 
        array (
          'wpseo_title' => 'Salads',
          'wpseo_desc' => 'Hundreads of recipes for Salads',
          'wpseo_metakey' => ''
        ),
        19 => 
        array (
          'wpseo_title' => 'Main dishes',
          'wpseo_desc' => 'Hundreads of recipes for Main dishes',
          'wpseo_metakey' => ''
        )
      ),
     'cuisine' => 
      array (
        22 => 
        array (
          'wpseo_title' => 'Italian',
          'wpseo_desc' => 'Secrets from Sicily in a click',
          'wpseo_metakey' => ''
        ),
        23 => 
        array (
          'wpseo_title' => 'Chinese',
          'wpseo_desc' => 'Oriental dishes were never this easy to make',
          'wpseo_metakey' => ''
        ),
        24 => 
        array (
          'wpseo_title' => 'Greek',
          'wpseo_desc' => 'Traditional Greek flavors in easy to make recipies',
          'wpseo_metakey' => ''
        )
      ) 
    );

Whats the syntax for adding a new element (array) to the recipe_type array with array_push? I could never get my head around multidimensional arrays and I'm a bit confused.

Abruption answered 30/4, 2013 at 20:15 Comment(0)
E
115

if you want to add the data in the increment order inside your associative array you can do this:

$newdata =  array (
      'wpseo_title' => 'test',
      'wpseo_desc' => 'test',
      'wpseo_metakey' => 'test'
    );

// for recipe

$md_array["recipe_type"][] = $newdata;

//for cuisine

 $md_array["cuisine"][] = $newdata;

this will get added to the recipe or cuisine depending on what was the last index.

Array push is usually used in the array when you have sequential index: $arr[0] , $ar[1].. you cannot use it in associative array directly. But since your sub array is had this kind of index you can still use it like this

array_push($md_array["cuisine"],$newdata);
Entrain answered 30/4, 2013 at 20:19 Comment(1)
Here's a question: prior to array_push, I'm adding a new row to the database and this row needs to be linked by id to the array element. So, if $id = mysql_insert_id() then I do $md_array["recipe_type"][$id] = $newdata, correct?Abruption
E
20

As in the multi-dimensional array an entry is another array, specify the index of that value to array_push:

array_push($md_array['recipe_type'], $newdata);
Evin answered 30/4, 2013 at 20:18 Comment(1)
How do you give a custom index to the $md_array[$number]? I get the following error: array_push() expects parameter 1 to be array, null given. The $number variable comes from a foreach($numbers as $number) where $numbersis a simple array of numbers. For example, $numbers = [1,2,3,4,5]. Ahh, I got it from this answer.Granicus
A
5

I know the topic is old, but I just fell on it after a google search so... here is another solution:

$array_merged = array_merge($array_going_first, $array_going_second);

This one seems pretty clean to me, it works just fine!

Amandaamandi answered 17/1, 2020 at 4:1 Comment(0)
T
-2

I got it with this one, and the code is pretty clean $array_merged = array_merge($array_going_first, $array_going_second);

Tilden answered 17/8, 2022 at 13:52 Comment(2)
Isn't this the same as the answer above?Dineric
Yes, just confirming the simplest way to get to the point in question, I don't have enough reputation to set the answer as the most usefulTilden

© 2022 - 2024 — McMap. All rights reserved.