2015-01-29 2 views
1

для начала я следующие объекты массива (идентификатор, Foo и бар является результатом запроса к базе данных и должен рассматриваться как переменный объект ->id)Переопределение массива. Могу ли я сделать это лучше?

array([0] => array([id] => 1, [foo] => 'a'), [1] => array([id] => 2, [foo] => 'b') 

и

array([0] => array([id] => 1, [bar] => 'b'), [1] => array([id] => 2, [bar] => 'a') 

Я хочу создать один новый массив с идентификатором столбца в качестве ключа

array([1] => array([foo] => 'a', [bar] => 'b'), [2] => array([foo] => 'b', [bar] => 'a') 

Я использовал следующие строки кода для создания нужного массива:

foreach($array1 as $row1) { 
    $newArray1[$row1->id] = $row1; 
} 

foreach($array2 as $row2) { 
    $newArray2[$row2->id] = $row2; 
} 

foreach($array2 as $key => row3) { //array 2 is always longer or equal to array 1 
    $result[$key]['bar'] = $newArray2[$key]->bar; 
    if (isset($newArray1[$key])) { 
     $result[$key]['foo'] = $newArray1[$key]->foo; 
    } else { 
     $result[$key]['bar'] = 0; 
    } 
} 

Я думаю, что это можно сделать намного проще. Так ли это, если да, как?

+0

Намного проще, чем эти 7 строк тривиального кода (примечание: код был не долго после того, как изменился Я поставил свой комментарий)? Фактически вы не могли бы использовать промежуточный массив и напрямую заполнять '$ result' в первых двух циклах – zerkms

+0

, не существует ли что-то вроде array_merge, которое могло бы это сделать? – AgeDeO

+0

Если была функция 'array_merge_exactly_like_AgeDeO_needs()', тогда да – zerkms

ответ

2

Если я понял, вам нужно объединить два массива, используя в качестве индекса поле 'id', равное обоим. Я хотел бы сделать это:

$newarray = array(); 
for($i=0;$i<count($array1);$i++) 
    $newarray[$array1[$i]["id"]] = array($array1[$i]["foo"], $array2[$i]["bar"]); 
+0

работал отлично, спасибо – AgeDeO

0

вместо создания нового массива вы можете сделать это:

$arr1=array('0' => array('id' => 1, 'foo' => 'a'), '1' => array('id' => 2, 'foo' => 'b')); 

$arr2=array('0' => array('id' => 1, 'bar' => 'b'), '1' => array('id' => 2, 'bar' => 'a')); 
for($i=0;$i<count($arr1);$i++){ 
    $arr1[$i] = array("foo"=>$arr1[$i]["foo"], "bar"=>$arr2[$i]["bar"]); 

} 
print_r($arr1); 
Смежные вопросы