2012-04-16 48 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