简体   繁体   中英

How can I merge one array with values into an array with stdClass objects?

I have two arrays and looking for the way to merge them. Standard array_merge() function don't work.

Do you know any nice solution without foreach iteration?

My first array:

Array
(
    [0] => stdClass Object
        (
            [field_value] => Green
            [count] => 
        )

    [1] => stdClass Object
        (
            [field_value] => Yellow
            [count] => 
        )
)

My second array:

Array
(
    [0] => 2
    [1] => 7
)

And as a result I would like to get:*

Array
(
    [0] => stdClass Object
        (
            [field_value] => Green
            [count] => 2
        )

    [1] => stdClass Object
        (
            [field_value] => Yellow
            [count] => 7
        )
)

This should work for you:

Just simply loop through both arrays with array_map() and pass the argument from array one as reference. Then you can simply assign the value to the count property.

<?php

    array_map(function(&$v1, $v2){
        $v1->count = $v2;
    }, $arr1, $arr2);

    print_r($arr1);

?>

output:

Array
(
    [0] => stdClass Object
        (
            [field_value] => Green
            [count] => 2
        )

    [1] => stdClass Object
        (
            [field_value] => Yellow
            [count] => 7
        )

)
 [akshay@localhost tmp]$ cat test.php
 <?php

  $first_array = array( 
            (object)array("field_value"=>"green","count"=>null),
            (object)array("field_value"=>"yellow","count"=>null)
             );

  $second_array = array(2,7);


  function simple_merge($arr1, $arr2)
  {
    return array_map(function($a,$b){ $a->count = $b; return $a; },$arr1,$arr2);
  }

  print_r($first_array);
  print_r($second_array);
  print_r(simple_merge($first_array,$second_array));

 ?>

Output

 [akshay@localhost tmp]$ php test.php
 Array
 (
     [0] => stdClass Object
         (
             [field_value] => green
             [count] => 
         )

     [1] => stdClass Object
         (
             [field_value] => yellow
             [count] => 
         )

 )
 Array
 (
     [0] => 2
     [1] => 7
 )
 Array
 (
     [0] => stdClass Object
         (
             [field_value] => green
             [count] => 2
         )

     [1] => stdClass Object
         (
             [field_value] => yellow
             [count] => 7
         )

 )

it is simple

code:

 $i = 0;
    foreach($firstarrays as $firstarr)
    {
        $firstarr['count'] = $secondarray[$i];
        $i++;
    }

Another option:

$a1 = Array(
    (object) Array('field_value' => 'Green', 'count' => null),
    (object) Array('field_value' => 'Yellow', 'count' => null)
);

$a2 = Array(2, 7);

for ($i=0; $i<sizeof($a1); $i++) {
    $a1[$i]->count=$a2[$i];
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM