Во-первых, извините за длительное объяснение. У меня есть два массива в PHP. Первый массив – это массив объектов. Второй массив – это массив массивов. В принципе, я хочу выполнить цикл и объединить объект с его соответствующим массивом и вернуть объединенный объект.
См. Следующий массив print_r()
массива объектов:
Array ( [0] => stdClass Object ( [gear] => helloworld [status] => running [started] => 40 Minutes Ago [start] => index.js [route] => 127.0.0.1:3000 [parameters] => Array ( ) ) [1] => stdClass Object ( [gear] => test [status] => stopped [started] => [start] => index.js [route] => [parameters] => Array ( ) ) [2] => stdClass Object ( [gear] => test2 [status] => stopped [started] => [start] => index.js [route] => [parameters] => Array ( [0] => first [1] => second [2] => third ) ) )
См. Следующий массив print_r()
массива массивов:
Array ( [0] => Array ( [gear] => helloworld [machine_id] => E6z5ekvQ [created_by] => 10010 [modified_by] => 10010 [created] => 2011-09-22T16:30:11-07:00 [modified] => 2011-09-22T16:30:11-07:00 ) [1] => Array ( [gear] => test [machine_id] => E6z5ekvQ [created_by] => 10010 [modified_by] => 10010 [created] => 2011-09-22T16:44:25-07:00 [modified] => 2011-09-22T16:44:25-07:00 ) [2] => Array ( [gear] => test2 [machine_id] => E6z5ekvQ [created_by] => 10010 [modified_by] => 10010 [created] => 2011-09-22T16:45:43-07:00 [modified] => 2011-09-22T16:45:43-07:00 ) )
Таким образом, основной ключ для обоих gear
. Таким образом, мы должны соответствовать передаче от первого объекта, со второй передачей в массиве и возвращать что-то вроде:
stdClass Object ( [gear] => helloworld [status] => running [started] => 40 Minutes Ago [start] => index.js [route] => 127.0.0.1:3000 [parameters] => Array ( ) [machine_id] => E6z5ekvQ [created_by] => 10010 [modified_by] => 10010 [created] => 2011-09-22T16:30:11-07:00 [modified] => 2011-09-22T16:30:11-07:00 )
Обратите внимание, что передача объединена в одно свойство объекта, очевидно, передача не появляется дважды. Идеи?
Если бы вы могли индексировать массив по gear
или некоторую уникальную ценность, было бы намного проще.
$indexed = array(); // create an array using 'gear' as the index foreach($arrayValue as $value) { $indexed[$value['gear']] = $value; } // loop over each object foreach($objectArray as $obj) { $value = $indexed[$obj->gear]; // find the corresponding array foreach($value as $name => $val) { $obj->$name = $val; // assign each array index/value pair to the object } }
Если возможно, чтобы ваш код возвращал массив с индексом по умолчанию, вы можете удалить первый цикл foreach.
Надеюсь, это поможет.