1

I have 4 associative arrays as per below:

$ids  = array(
      '0' => '7' ,
      '1' => '8' ,
      '2' => '9'
);
$names = array (
      '0' => 'Name 1' ,
      '1' => 'Name 2' ,
      '2' => 'another name'
);
$marks = array(
      '0' => '8' ,
      '1' => '5' ,
      '2' => '8'
);
§grade = array(
      '0' => '4' ,
      '1' => '2.5' ,
      '2' => '4'
);

I want to "merge" them to a single array, containing associative arrays as per below:

$data = array(
   array(
      'id' => '7' ,
      'name' => 'Name 1' ,
      'marks' => '8',
      'grade' => '4'
   ),
   array(
      'id' => '8' ,
      'name' => 'Name 2' ,
      'marks' => '5',
      'grade' => '2.5'
   ),
   array(
      'id' => '9' ,
      'name' => 'another name',
      'marks' => '8',
      'grade' => '4'
   )
);

I am a new PHP developer and have no idea how to accomplish this. Your help will be much appreciated. Thank you

hakre
  • 193,403
  • 52
  • 435
  • 836
Saleem
  • 1,059
  • 14
  • 27

1 Answers1

6

I believe this is your array

$ids = array('0' => '7','1' => '8','2' => '9');
$names = array('0' => 'Name 1','1' => 'Name 2','2' => 'another name');
$marks = array('0' => '8','1' => '5','2' => '8');
$grade = array('0' => '4','1' => '2.5','2' => '4');

#New Keys
$keys = array("id","name","marks","grade");

A. You can use MultipleIterator

$final = array();
$mi = new MultipleIterator();
$mi->attachIterator(new ArrayIterator($ids));
$mi->attachIterator(new ArrayIterator($names));
$mi->attachIterator(new ArrayIterator($marks));
$mi->attachIterator(new ArrayIterator($grade));

foreach ( $mi as $value ) {
    $final[] = array_combine($keys, $value);
}
var_dump($final);

B. You can use array_map

$final = array();
foreach ( array_map(null, $ids, $names, $marks, $grade) as $key => $value ) {
    $final[] = array_combine($keys, $value);
}
var_dump($final);

Output

array
  0 => 
    array
      'id' => string '7' (length=1)
      'name' => string 'Name 1' (length=6)
      'marks' => string '8' (length=1)
      'grade' => string '4' (length=1)
  1 => 
    array
      'id' => string '8' (length=1)
      'name' => string 'Name 2' (length=6)
      'marks' => string '5' (length=1)
      'grade' => string '2.5' (length=3)
  2 => 
    array
      'id' => string '9' (length=1)
      'name' => string 'another name' (length=12)
      'marks' => string '8' (length=1)
      'grade' => string '4' (length=1)
Baba
  • 94,024
  • 28
  • 166
  • 217
  • now inner array is array 0 => string '7' (length=1) 1 => string 'Name 1' (length=6) 2 => string '8' (length=1) 3 => string '4' (length=1) I need it as 'id' => '7' , 'name' => 'Name 1' , 'marks' => '8', 'grade' => '4' Please help – Saleem Oct 13 '12 at 14:25
  • 1
    +1 I learned 2x things, even if you haven't (yet...) addressed the $key => $value issue ;-) Nice answer dude. – Sepster Oct 13 '12 at 14:29
  • How to set $key => $value Please hlep – Saleem Oct 13 '12 at 14:32
  • Thank you Baba and Sepster :) – Saleem Oct 13 '12 at 14:33
  • I got this error array_combine() expects parameter 1 to be array, null given – Saleem Oct 13 '12 at 14:38
  • @Saleem your array must have changed works perfectly http://codepad.viper-7.com/Owve46 – Baba Oct 13 '12 at 14:39
  • Thank you for you time Baba i am getting print_r as following Array ( [0] => 6 [1] => 7 [2] => 8 ) Array ( [0] => Student 6 [1] => Test Student [2] => Student 7 ) Array ( [0] => 9 [1] => 8 [2] => ) Array ( [0] => 4.5 [1] => 4.25 [2] => ) Array ( [0] => [1] => [2] => ) – Saleem Oct 13 '12 at 14:45
  • I am sorry for trouble I was missing $keys = array("id","name","marks","grade"); you guys area great Thank you for help Baba – Saleem Oct 13 '12 at 14:48
  • Sorry again... How can I add 2 [exam] => sameforall and [exam_id] => sameforall to each inner array. – Saleem Oct 13 '12 at 15:08