2012-04-16 53 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 2012-04-16 21:30:28

+0

5.3.2 ..附帶解決方案;) – Tom 2012-04-16 21:32:55

回答

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 2012-04-17 15:43:35

1

必須使用for循環這一目標進行掃描。

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

您可以使用類似的算法。

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 

凡array_find()類似於PHP的array_search(),但它需要一個布爾值的回調函數,而不是一個固定值。調整匹配回調以適應您要找的東西。

另請參閱:Anonymous functions