2012-04-16 8 views
0

から正しい値を取得する私は2つの配列を比較する必要があり、正しい値をエコーシステム、複数のアレイ

[1] => Array 
     (
      [Message] => Array 
       (
        [id] => 4f8c74ce-8590-4e8b-a5ba-6f54b2158146 
        [user_id] => 1 
        [to_user_id] => 3 
        [created] => 2012-04-16 21:36:46 
        [last_message_id] => 8 
        [message_count] => 2 
       ) 

      [MessageItem] => Array 
       (
        [0] => Array 
         (
          [id] => 7 
          [message_id] => 4f8c74ce-8590-4e8b-a5ba-6f54b2158146 
          [user_id] => 1 
          [message] => Whola amigo 
          [read] => 0 
          [created] => 2012-04-16 21:36:46 
         ) 

        [1] => Array 
         (
          [id] => 8 
          [message_id] => 4f8c74ce-8590-4e8b-a5ba-6f54b2158146 
          [user_id] => 1 
          [message] => sdfsdfdsfdsfsdfds 
          [read] => 0 
          [created] => 2012-04-16 21:37:54 
         ) 

       ) 

     ) 

に取り組んでいます..だから私は

ECHO ['MessageItem]['message'] WHERE ['MessageItem]['id'] == ['Message]['last_message_id'] 

わからないにしたいですphpを使ってこれを実現する方法!?!

ありがとうございました!

-Tom

+0

どのバージョンのPHPを使用していますか?具体的には、匿名関数を使用できるように>> 5.3ですか? – Grilse

+0

5.3.2 ..ソリューションが付属しています;) – Tom

答えて

1

この簡単な解決策は、与えられた例のために働く:

$array = array(
      '1' => array(
       'Message' => array(
        'id' => '4f8c74ce-8590-4e8b-a5ba-6f54b2158146', 
        'user_id' => 1, 
        'to_user_id' => 3, 
        'created' => '2012-04-16 21:36:46', 
        'last_message_id' => 8, 
        'message_count' => 2 
       ), 
       'MessageItem' => array(
        array(
         'id' => 7, 
         'message_id' => '4f8c74ce-8590-4e8b-a5ba-6f54b2158146', 
         'user_id' => 1, 
         'message' => 'Whola amigo', 
         'read' => 0, 
         'created' => '2012-04-16 21:36:46' 
        ), 
        array(
         'id' => 8, 
         'message_id' => '4f8c74ce-8590-4e8b-a5ba-6f54b2158146', 
         'user_id' => 1, 
         'message' => 'sdfsdfdsfdsfsdfds', 
         'read' => 0, 
         'created' => '2012-04-16 21:37:54' 
        ) 
       ) 
     ) 
); 



$searchKey = $array['1']['Message']['last_message_id']; 

foreach ($array['1']['MessageItem'] as $messageItemArray) { 
    if ($searchKey == $messageItemArray['id']) { 
     echo $messageItemArray['message']; 
    } 
} 
+0

ありがとうございました。 – Tom

1

あなたは、この目的のためのforループでスキャンする必要があります。

for($i=0; $i<count([MessageItem]);$i++){ 
if(['MessageItem'][$i]['id'] == ['Message']['last_message_id']){ 
    echo ['MessageItem'][$i]['id']; 
} 
} 

このようなアルゴリズムを使用できます。 array_find()

0
/** 
* Searches an array for the first element for which 
* $match_callback returns true. 
* 
* @return mixed The key of the matching entry, or FALSE if no match was found. 
*/ 
function array_find(array $haystack, $match_callback) { 
    foreach ($haystack as $key => $value) { 
     if ($match_callback($key, $value)) { 
      return $key; 
     } 
    } 
    return false; 
} 

$matching_key = array_find($my_array['MessageItem'], function($key, $messageItem) use ($my_array) { 
    return $messageItem['id'] === $my_array['Message']['last_message_id'];  
}); 

echo 'Found key: ' . $matching_key .PHP_EOL; // 1 
echo 'Message: ' . $my_array['MessageItem'][$matching_key]['message']; // sdfsdfdsfdsfsdfds 

ではなく固定値ブールコールバック関数を取ることを除いて、PHPのarray_search()と同様です。あなたが探しているものの種類に合わせて、マッチコールバックを調整します。

参考:Anonymous functions