Bogdan C
Bogdan C

Reputation: 399

PHP Push simple array values in multidimensional array not working

EDIT: UPDATED CODE. PLEASE SEE COMMENTED LINES:

This is my problem:

I have 2 arrays:

$numbers = array(0,3,8);

$data = array('January' => array('BATH' => array('ID', 'user', 'type'), 'KITCHEN' => array('ID', 'user', 'type')), 'february' => array('BATH' => array('ID', 'user', 'type'), 'KITCHEN' => array('ID', 'user', 'type')), 'march' => array('BATH' => array('ID', 'user', 'type'), 'KITCHEN' => array('ID', 'user', 'type')));

Expected output must be:

array (size=6)
  'January' => 
    array (size=2)
      'BATH' => 
        array (size=3)
          0 => string 'ID' (length=2)
          1 => string 'user' (length=4)
          2 => string 'type' (length=4)
      'KITCHEN' => 
        array (size=3)
          0 => string 'ID' (length=2)
          1 => string 'user' (length=4)
          2 => string 'type' (length=4)
      'total_lunar' => int '0' // // This is the first value from first array
  'february' => 
    array (size=2)
      'BATH' => 
        array (size=3)
          0 => string 'ID' (length=2)
          1 => string 'user' (length=4)
          2 => string 'type' (length=4)
      'KITCHEN' => 
        array (size=3)
          0 => string 'ID' (length=2)
          1 => string 'user' (length=4)
          2 => string 'type' (length=4)
       'total_lunar' => int '3' // This is the second value from first array
  'march' => 
    array (size=2)
      'BATH' => 
        array (size=3)
          0 => string 'ID' (length=2)
          1 => string 'user' (length=4)
          2 => string 'type' (length=4)
      'KITCHEN' => 
        array (size=3)
          0 => string 'ID' (length=2)
          1 => string 'user' (length=4)
          2 => string 'type' (length=4)
       'total_lunar' => int '8' // This is the last value from first array

My PHP code is:

for ($i = 0; $i < count($numbers); $i++) 
{
    foreach ($data as $key => $value) 
    {
        $data[$key]['total_lunar'][$i] =  $numbers[$i];
    }
}

I don't know why, the result sets each array but not each value of first array:

array (size=6)
  'January' => 
    array (size=2)
      'BATH' => 
        array (size=3)
          0 => string 'ID' (length=2)
          1 => string 'user' (length=4)
          2 => string 'type' (length=4)
      'KITCHEN' => 
        array (size=3)
          0 => string 'ID' (length=2)
          1 => string 'user' (length=4)
          2 => string 'type' (length=4)
      'total_lunar' => 
          array (size=3)
             0 => int 0
             1 => int 3
             2 => int 8
  'february' => 
    array (size=2)
      'BATH' => 
        array (size=3)
          0 => string 'ID' (length=2)
          1 => string 'user' (length=4)
          2 => string 'type' (length=4)
      'KITCHEN' => 
        array (size=3)
          0 => string 'ID' (length=2)
          1 => string 'user' (length=4)
          2 => string 'type' (length=4)
       'total_lunar' => 
          array (size=3)
             0 => int 0
             1 => int 3
             2 => int 8
  'march' => 
    array (size=2)
      'BATH' => 
        array (size=3)
          0 => string 'ID' (length=2)
          1 => string 'user' (length=4)
          2 => string 'type' (length=4)
      'KITCHEN' => 
        array (size=3)
          0 => string 'ID' (length=2)
          1 => string 'user' (length=4)
          2 => string 'type' (length=4)
       'total_lunar' => 
          array (size=3)
             0 => int 0
             1 => int 3
             2 => int 8

['total_lunar'] key should return one value as the expected output above, not all array values. Looked all over for a solution but can't manage to solve this.

Upvotes: 0

Views: 167

Answers (1)

bestprogrammerintheworld
bestprogrammerintheworld

Reputation: 5520

Keep it simple. I think this is what you're looking for?

$n=0;
foreach($data as &$d) {
    $d['total_lunar'] = $numbers[$n++];
}

The expected output you would se by using this:

echo '<pre>';
print_r($data);
echo '</pre>';

Upvotes: 2

Related Questions