Добавление в многомерные массивы PHP - PullRequest
0 голосов
/ 09 августа 2011

В моей функции я сохраняю в $var1 запрос из базы данных постов.И я сохраняю в $var2 запрос из базы данных изображений из постов.(У каждого есть ключ post_id для их соединения.)

$var1 вернет что-то вроде этого.

array (
  [0] => stdClass Object
     (
         [post_id] => 210
         [post_title] => title
     )
  [1] => stdClass Object
     (
         [post_id] => 212
         [post_title] => title
     )
)

и $var2 вернет что-то вроде этого.

array (
  [0] => stdClass Object
     (
         [post_id] => 210
         [post_meta_key] => image
         [post_meta_value] => image_value
     )
  [1] => stdClass Object
     (
         [post_id] => 212
         [post_meta_key] => flag
         [post_meta_value] => flag_value
     )
  [2] => stdClass Object
     (
         [post_id] => 210
         [post_meta_key] => image
         [post_meta_value] => image_value
     )
  [3] => stdClass Object
     (
         [post_id] => 102
         [post_meta_key] => image
         [post_meta_value] => image_value
     )
)

Я хотел бы создать foreach из $var1, и если $var1[post_id] = $var2[post_id], чем $var1 будет отредактировано примерно так

array (
  [0] => stdClass Object
     (
         [post_id] => 210
         [post_title] => title
         [image] => stdClass Object
             (
                 [0] => image_value
                 [1] => image_value
             )
     )
  [1] => stdClass Object
     (
         [post_id] => 212
         [post_title] => title
     )
)

Как я могу это сделать?

Ответы [ 3 ]

1 голос
/ 09 августа 2011
foreach ($var1 as &$post1)
{
  foreach($var2 as $post2)
  {
    if ($post1->post_id == $post2->post_id)
    {
       $post1->image = (object)array(
         $post2->post_meta_value
       );
    }
  }
}
0 голосов
/ 09 августа 2011

Это то, что вы хотите:

foreach ( $var1 as $v1 )
{
    foreach ( $var2 as $v2 )
    {
        if ( $v1['post_id'] == $v2['post_id'] )
            $v1['image'][] = $v2['post_meta_value'];
    }
}
0 голосов
/ 09 августа 2011

Лучше использовать массивы вместо объектов здесь:

foreach ($var2 as $key2=>$var2){
    if (!empty($var1[$key2])){
        $var1[$key2]['image']->$var2;
    }
}

Вы можете разыгрывать массивы и объекты взад и вперед с помощью

$array = (array)$object;
$object = (object)$array;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...