2015-05-15 3 views
1

У меня есть два массива и поиск способа их слияния. Standard array_merge() функция не работает.Как я могу объединить один массив со значениями в массив с объектами stdClass?

Знаете ли вы хорошее решение без итерации foreach?

Мой первый массив:

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 
     ) 
) 
+4

Пожалуйста, добавьте вашу попытку (ы) на ваш вопрос. – Rizier123

+0

Я пробовал функцию array_merge. – user889349

+0

@ user889349 Затем добавьте свою попытку на свой вопрос и покажите свою работу/усилие – Rizier123

ответ

2
[[email protected] 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)); 

?> 

Выход

[[email protected] 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 
     ) 

) 
5

Это должно работать для вас:

Просто попробуйте y через оба массива с array_map() и передать аргумент из массива один в качестве ссылки. Затем вы можете просто присвоить значение свойству count.

<?php 

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

    print_r($arr1); 

?> 

выход:

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

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

) 
+0

Отлично! Спасибо! – user889349

+0

@ user889349 Добро пожаловать! (Вы все еще можете добавить свои попытки к своему вопросу: http://stackoverflow.com/questions/30257588/php-array-merge-and-coutn/30257672?noredirect=1#comment48614966_30257588) – Rizier123

+0

@ user889349 Могу я узнать, что лучше в принимающем ответе, чем у меня? – Rizier123

0

просто

код:

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

Другой вариант:

$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]; 
} 
Смежные вопросы