2016-07-10 20 views
-4

Ich habe 3 Arrays. Diese zusammenhängen. Ich möchte diese Aussagen kombinieren.PHP, 3 Array zu einem Array Merge Alternative

<?php 

$post = array( 
    array (
     'id'  => 1, 
     'title' => 'Title 1', 
     'content' => 'Content 1' 
    ), 
    array (
     'id'  => 2, 
     'title' => 'Title 2', 
     'content' => 'Content 2' 
    ), 
    array (
     'id'  => 3, 
     'title' => 'Title 3', 
     'content' => 'Content 3' 
    ), 
); 


$user = array( 
    array (
     'id' => 1, 
     'name' => 'Mark' 
    ), 
    array (
     'id' => 2, 
     'name' => 'Selena' 
    ) 
); 

$post_user = array( 
    array (
     'id'  => 1, 
     'post_id' => 1, 
     'user_id' => 1 
    ), 
    array (
     'id'  => 2, 
     'post_id' => 2, 
     'user_id' => 1 
    ), 
    array (
     'id'  => 3, 
     'post_id' => 3, 
     'user_id' => 2 
    ), 
); 


$merge = array(); 
foreach($posts_user as $data){  
    foreach ($posts as $post){ 
     if($data['post_id'] == $post['id']){ 
      foreach ($users as $user){ 
       if($data['user_id'] == $user['id']){ 
       $post['user'] = $user; 
       $merge['post'][] = $post; 
       } 
      } 
     } 
    }  
} 

print_r($merge); 

Ich möchte wie folgt sein. Wie kann ich es tun? Ich will Ergebnisse.

$merge = array( 
    array (
     'id'  => 1, 
     'title' => 'Title 1', 
     'content' => 'Content 1', 
     'user' => array (
         'id' => '1', 
         'name' => 'Mark' 
        ), 

    ), 
    array (
     'id'  => 2, 
     'title' => 'Title 2', 
     'content' => 'Content 2', 
     'user' => array (
         'id' => '1', 
         'name' => 'Mark' 
        ), 
    ), 
    array (
     'id'  => 3, 
     'title' => 'Title 3', 
     'content' => 'Content 3', 
     'user' => array (
         'id' => '2', 
         'name' => 'Selena' 
        ), 
    ), 
); 

Gibt es noch eine Alternative? Beispielsweise; Wie mache ich mit ihnen?

array_walk_recursive(), ArrayIterator(), RecursiveArrayIterator()

+1

Klingt wie Sie drei Abfragen verwenden, wenn es 1 mit Verknüpfungen sein sollte. – chris85

+0

verwenden Sie einfach die richtige SQL-Anweisung, anstatt dies in der PHP-Seite, genau wie Chris sagte – Ghost

+0

Ich mache mit SQL, ich mache ein Array ist – Scaffold

Antwort

0

Ich habe versucht zu tun.

<?php  
$post = array( 
    array (
     'id'  => 1, 
     'title' => 'Title 1', 
     'content' => 'Content 1' 
    ), 
    array (
     'id'  => 2, 
     'title' => 'Title 2', 
     'content' => 'Content 2' 
    ), 
    array (
     'id'  => 3, 
     'title' => 'Title 3', 
     'content' => 'Content 3' 
    ), 
); 


$user = array( 
    array (
     'id' => 1, 
     'name' => 'Mark' 
    ), 
    array (
     'id' => 2, 
     'name' => 'Selena' 
    ) 
); 

$post_user = array( 
    array (
     'id'  => 1, 
     'post_id' => 1, 
     'user_id' => 1 
    ), 
    array (
     'id'  => 2, 
     'post_id' => 2, 
     'user_id' => 1 
    ), 
    array (
     'id'  => 3, 
     'post_id' => 3, 
     'user_id' => 2 
    ), 
); 

$newuser = array(); 
foreach($post_user as $data){ 
    foreach ($user as $users){ 
     if($data['user_id'] == $users['id']){ 
     $newuser[] = $users; 
     } 
    } 
} 



$mi = new MultipleIterator(MultipleIterator::MIT_NEED_ALL|MultipleIterator::MIT_KEYS_ASSOC); 
$mi->attachIterator(new ArrayIterator($post),1); 
$mi->attachIterator(new ArrayIterator($newuser),'user'); 

$newArray = array(); 
foreach($mi as $details) { 
    $newArray[] = $details; 
} 
print_r($newArray); 

Ergebnisse

Array 
(
    [0] => Array 
     (
      [1] => Array 
       (
        [id] => 1 
        [title] => Title 1 
        [content] => Content 1 
       ) 

      [user] => Array 
       (
        [id] => 1 
        [name] => Mark 
       ) 

     ) 

    [1] => Array 
     (
      [1] => Array 
       (
        [id] => 2 
        [title] => Title 2 
        [content] => Content 2 
       ) 

      [user] => Array 
       (
        [id] => 1 
        [name] => Mark 
       ) 

     ) 

    [2] => Array 
     (
      [1] => Array 
       (
        [id] => 3 
        [title] => Title 3 
        [content] => Content 3 
       ) 

      [user] => Array 
       (
        [id] => 2 
        [name] => Selena 
       ) 

     ) 

)