2013-05-24 3 views
0

У меня есть объект с несколькими свойствами, который создает многомерный массив. Я пытаюсь понять, как создать новый массив, который объединяет два отдельных объекта в один. Он бы от этого:PHP-массив, объединяющий все остальные элементы

array(
    object_1(
     'id' => '1', 
     'name' => 'joe' 
     etc....), 
    object_2(
     'id' => '2', 
     'name' => 'jessica', 
     etc....) 
    object_3(
     'id' => '3', 
     'name' => 'tim', 
     etc....) 
    object_4(
     'id' => '4', 
     'name' => 'tammy', 
     etc....) 
    ); 

И стал:

array(
    object_1(
     'id' => '1', 
     'name' => 'joe', 
     etc... 
     'id2' = > '2', 
     'name2' => 'jessica', 
     etc...) 
    object_2(
     'id' => '3', 
     'name' => 'tim', 
     etc... 
     'id2' = > '4', 
     'name2' => 'tammy', 
     etc...) 

Итак, мне нужно, чтобы объединить данные из чередующихся элементов, а также изменить ключ во всех вторых объектах, поэтому он не совпадают с первым. Имеют смысл? Извините, если это не так, я попробую уточнить, если вам нужно!

Спасибо за любую помощь ....

EDIT: первые два StdClass объекты по print_r:

[results] => Array 
    (
     [0] => stdClass Object 
      (
       [email] => [email protected] 
       [message] => Create another test 
       [image] => 138.png 
       [fid] => 53 
      ) 

     [1] => stdClass Object 
      (
       [email] => [email protected] 
       [message] => none 
       [image] => 330.jpg 
       [fid] => 52 
      ) 

и я хочу, чтобы он стал:

[results] => Array 
    (
     [0] => stdClass Object 
      (
       [email] => [email protected] 
       [message] => Create another test 
       [image] => 138.png 
       [fid] => 53 
       [email2] => [email protected] 
       [message2] => none 
       [image2] => 330.jpg 
       [fid2] => 52 
      ) 

ли это прояснить ?

+1

Что ваш вопрос? Кажется, что простой цикл 'for' должен делать это, так что вы пробовали? – Barmar

+0

Поскольку ОП сидит, группировка не имеет смысла и НЕ должна быть реализована. В первом примере каждый объект демонстрирует атомный набор данных, как и должно быть. Если нет какой-то логической группировки, которую вы не показываете нам, вам лучше не прикасаться к ней. –

+0

Комбинируя данные, с чем вы их объединяете? Я не вижу в вашем примере, почему вы объединили 1 и 2 вместе, но не добавляли 3 и 4 в эту 1 группу тоже. –

ответ

1

Предполагая, что на самом деле это многомерный массив, а не массив объектов, это должно сделать это:

$new_array = array(); 
for ($i = 0; $i < count($array); $i +=2) { 
    $new_array[] = $array[$i]; 
    foreach ($array[$i+1] as $key => $value) { 
    $new_array[$i/2][$key.'2'] = $value; 
    } 
} 

EDIT: Для массива объектов, становится:

$new_array = array(); 
for ($i = 0; $i < count($array); $i +=2) { 
    $new_array[] = $array[$i]; 
    foreach (get_object_vars($array[$i+1] as $key => $value) { 
    $new_array[$i/2]->{$key.'2'} = $value; 
    } 
} 

Это будет работать только для публичных объектов.

+0

Бармар, спасибо вам за помощь! Ваш ответ выглядит великолепно, но я боюсь, что имею дело с объектами. Извините, я вводил в заблуждение то, что я говорил о многомерных массивах. Мне нужно объединить объект 0 + 1, объект 2 + 3 ... и так далее. – Dabellator

+0

Являются ли эти общедоступные свойства, которые вы можете назначить напрямую, или вам нужно пройти через API объектов, чтобы их установить? – Barmar

+0

Да, отлично, ваш второй вариант сделал трюк. Спасибо вам за помощь! – Dabellator

0

Вы могли бы сделать что-то вроде

for($i=0;$i<count($array);$i+=2) { 
    $id = $array[$i]['id']; 
    $name = $array[$i]['name']; 
    $id2 = $array[$i+1]['id']; 
    $name2 = $array[$i+1]['name']; 
} 

или

$newarray = array(); 
$j=0; 
for($i=0;$i<count($array);$i+=2) { 
    $newarray[$j]['id'] = $array[$i]['id']; 
    $newarray[$j]['nae'] = $array[$i]['name']; 
    $newarray[$j]['id2'] = $array[$i+1]['id']; 
    $newarray[$j]['name2'] = $array[$i+1]['name']; 
    $j++; 
} 
Смежные вопросы