logo
Ask your WordPress questions! Pay money and get answers fast! (more info)

Warning: Please do not give out any FTP or ssh credentials to anyone, unless you trust them completely. Giving out login details is dangerous.

If the asker does not get an answer then they have 10 days to request a refund.

$5
Combine 2 arrays to 1

How to combine 2 arrays to 1?

I have two arrays:

Array (
[0] => stdClass Object (
[name] => John
[id] => 1
)
}

Array (
[0] => stdClass Object (
[meta_value] => 9
[id] => 1
)
}


I need to get:

Array (
[0] => stdClass Object (
[meta_value] => 9
[name] => John
[id] => 1
)
}

This question has been answered.

Igor | 05/25/12 at 12:32pm Edit


The experts have suggested, on average, a prize of $10 for this question.

(7) Possible Answers Submitted...

See a chronological view of answers?

Warning: Please do not give out any FTP or ssh credentials to anyone, unless you trust them completely. Giving out login details is dangerous.

  • avatar
    Last edited:
    05/25/12
    12:39pm
    Arnav Joy says:

    use this
    <?php $result = array_unique(array_merge($array1, $array2)); ?>

    • 05/25/12 12:50pm

      Igor says:

      Hi Arnav,

      Unfortunately, I've got an error:

      Catchable fatal error: Object of class stdClass could not be converted to string

    • 05/25/12 4:20pm

      Arnav Joy says:

      try this

      <?php



      $array1 = array(0 => array(

      'name' => 'John',

      'id' => 1

      ));



      $array2 = array(0 => array(

      'meta_value' => 9,

      'id' => 1

      ));



      $array3 = new stdClass();



      foreach ($array1 as $k => $val) {

      foreach($val as $key => $value) {

      $array3->{$key} = $value;

      }

      }



      foreach ($array2 as $k => $val) {

      foreach($val as $key => $value) {

      $array3->{$key} = $value;

      }

      }


      $arr[0] = $array3 ;

      print_r( $arr );

      ?>

  • avatar
    Last edited:
    05/25/12
    12:40pm
    Daniel Yoen says:

    <?php
    $array1 = array();
    $array2 = array();
    $result = array_merge($array1, $array2);
    ?>

  • avatar
    Last edited:
    05/25/12
    12:43pm
    Francisco Javier Carazo Gil says:

    You have: array_a and array_b, well:


    array_new = array();

    for($i = 0; $i < count($array_a); $i++)
    {
    array_new[] = array_unique(array_merge($array_a[$i], $array_b[$i]));
    }


    Hope this helps!

    • 05/25/12 12:43pm

      Francisco Javier Carazo Gil says:

      You have: array_a and array_b, well:


      array_new = array();

      for($i = 0; $i < count($array_a); $i++)
      {
      array_new[] = array_unique(array_merge($array_a[$i], $array_b[$i]));
      }


      Hope this helps!

  • avatar
    Last edited:
    05/25/12
    12:43pm
    Jerson Baguio says:

    try array_merge i think this is the function to achieve your target array

    http://www.w3schools.com/php/func_array_merge.asp

  • avatar
    Last edited:
    05/25/12
    12:47pm
    rizaljohn says:

    Or you can simply add to arrays like:

    $combine_array = $array1 + $array2; 

  • avatar
    Last edited:
    05/25/12
    12:55pm
    Kailey Lampert says:

    $merged = array( (object) array_merge((array) $array1[0], (array) $array2[0]) );

    I created the the arrays you wanted to merge and tested the script. Screenshot: http://cl.ly/Gttn

    Previous versions of this answer: 05/25/12 at 12:55pm

    • 05/25/12 1:10pm

      Igor says:

      Kailey,

      Thank you for a reply. That almost works for me. Is there way to get result by the same way in case I have a few arrays on each sides?

      e.g.

      Array (

      [0] => stdClass Object (

      [name] => John

      [id] => 1

      )

      }

      Array (

      [1] => stdClass Object (

      [name] => Mark

      [id] => 2

      )

      }



      Array (

      [0] => stdClass Object (

      [meta_value] => 9

      [id] => 1

      )

      }


      Array (

      [1] => stdClass Object (

      [meta_value] => 10

      [id] => 2

      )

      }

    • 05/25/12 1:25pm

      Kailey Lampert says:

      I'm assuming an key of 0 in my little script.

      Depending on how many you're dealing with, you can run the script a few times and manually change the keys:

      $merged = array( (object) array_merge((array) $array1[1], (array) $array2[1]) );


      If you have a whole bunch, you can run it through a loop. I'm assuming 20 below:

      for( $i = 0; $i <= 20; ++$i ) {
      $merged = array( (object) array_merge((array) $array1[ $i ], (array) $array2[ $i ]) );
      }


      Are you dealing with a lot of variables, each containing an array with an object? Or just one variable containing an array of arrays each containing an object?

    • 05/25/12 1:48pm

      Igor says:

      I have a very similar arrays. An originaly, I just need to copy [name] from first array to the second array.

      Your example with for operator works too, however, in this case $merged result will be rewrited on each time of looping.

    • 05/25/12 1:50pm

      Kailey Lampert says:

      True, but I also don't know what you want your end result to look like. maybe:


      $merged = array();
      for( $i = 0; $i <= 20; ++$i ) {

      $merged[] = array( (object) array_merge((array) $array1[ $i ], (array) $array2[ $i ]) );

      }

  • avatar
    Last edited:
    05/25/12
    12:57pm
    Luis Abarca says:

    Try this simple way

    http://codepad.org/SMw5TrEJ


    <?php

    $array_a = array(0 => array(
    'name' => 'John',
    'id' => 1
    ));

    $array_b = array(0 => array(
    'meta_value' => 9,
    'id' => 1
    ));

    $array_c = array();

    foreach ($array_a as $key => $subarray) {
    foreach($subarray as $name => $value) {
    $array_c[$key][$name] = $value;
    }
    }

    foreach ($array_b as $key => $subarray) {
    foreach($subarray as $name => $value) {
    $array_c[$key][$name] = $value;
    }
    }

    print_r( $array_c );

    • 05/25/12 1:19pm

      Igor says:

      Hi Luis,

      Thank you! That almost works for me.


      However I've got Array instead of stdClass Object:

      Your example:

      Array (

      [0] => Array (

      [meta_value] => 9

      [name] => John

      [id] => 1

      )

      }

      instead of:

      Array (

      [0] => stdClass Object (

      [meta_value] => 9

      [name] => John

      [id] => 1

      )

      }

      How to get a correct result?

    • 05/25/12 2:09pm

      Luis Abarca says:

      Change the array for an stdClass

      http://codepad.org/6rs4DZAO


      <?php

      $array_a = array(0 => array(
      'name' => 'John',
      'id' => 1
      ));

      $array_b = array(0 => array(
      'meta_value' => 9,
      'id' => 1
      ));

      $array_c = new stdClass();

      foreach ($array_a as $key => $subarray) {
      foreach($subarray as $name => $value) {
      $array_c->{$name} = $value;
      }
      }

      foreach ($array_b as $key => $subarray) {
      foreach($subarray as $name => $value) {
      $array_c->{$name} = $value;
      }
      }

      print_r( $array_c );

    • 05/25/12 4:06pm

      Igor says:

      Now I've got a

      stdClass Object (
      [meta_value] => 9
      [name] => Metal Professionals
      [id] => 1
      )


      But I need a

      Array (
      [0] => stdClass Object (
      [meta_value] => 9
      [name] => Metal Professionals
      [id] => 1
      )


      I appreciate your help.

    • 05/25/12 4:13pm

      Luis Abarca says:

      Ohh i see, just add the object to an array,

      http://codepad.org/DLXR9eQr


      <?php

      $array_a = array(0 => array(
      'name' => 'John',
      'id' => 1
      ));

      $array_b = array(0 => array(
      'meta_value' => 9,
      'id' => 1
      ));

      $array_c = array();

      foreach ($array_a as $key => $subarray) {

      $array_c[$key] = new stdClass();

      foreach($subarray as $name => $value) {
      $array_c[$key]->{$name} = $value;
      }
      }

      foreach ($array_b as $key => $subarray) {
      foreach($subarray as $name => $value) {
      $array_c[$key]->{$name} = $value;
      }
      }

      print_r( $array_c );

    • 05/25/12 4:15pm

      Luis Abarca says:

      This way

      http://codepad.org/DLXR9eQr


      <?php

      $array_a = array(0 => array(
      'name' => 'John',
      'id' => 1
      ));

      $array_b = array(0 => array(
      'meta_value' => 9,
      'id' => 1
      ));

      $array_c = array();

      foreach ($array_a as $key => $subarray) {

      $array_c[$key] = new stdClass();

      foreach($subarray as $name => $value) {
      $array_c[$key]->{$name} = $value;
      }
      }

      foreach ($array_b as $key => $subarray) {
      if (!is_object($array_c[$key])) {
      $array_c[$key] = new stdClass();
      }

      foreach($subarray as $name => $value) {
      $array_c[$key]->{$name} = $value;
      }
      }

      print_r( $array_c );

    • 05/25/12 4:32pm

      Igor says:

      BINGO! Thats that I need!

      That works! Amazing!

      Luis,

      Thank you so much for your time. I'm really appreciate your help.


      PS: Can I doubled the bet for another small question? Is there way to sort $array_c by meta_value key value? I mean DESC order.

    • 05/25/12 5:27pm

      Igor says:

      I've found a solution.

      function cmp($a, $b) {

      if ($a->meta_value == $b->meta_value) :

      return 0;

      else :

      return $a->meta_value < $b->meta_value ? 1 : -1;

      endif;
      }

      usort($array_c, 'cmp');


      Luis,

      Thanks again!

This question has expired.



Gabriel Reguly, Igor, Arnav Joy voted on this question.



Current status of this question: Completed



Warning: Please do not give out any FTP or ssh credentials to anyone, unless you trust them completely. Giving out login details is dangerous.

If the asker does not get an answer then they have 10 days to request a refund.