Php 从多个数组中获取正确的值
我在一个系统上工作,我需要比较两个阵列并回显正确的值Php 从多个数组中获取正确的值,php,arrays,echo,Php,Arrays,Echo,我在一个系统上工作,我需要比较两个阵列并回显正确的值 [1] => Array ( [Message] => Array ( [id] => 4f8c74ce-8590-4e8b-a5ba-6f54b2158146 [user_id] => 1 [to_user_id] =>
[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此简单解决方案适用于给定的示例:
$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'];
}
}
为此,必须使用for循环进行扫描
for($i=0; $i<count([MessageItem]);$i++){
if(['MessageItem'][$i]['id'] == ['Message']['last_message_id']){
echo ['MessageItem'][$i]['id'];
}
}
$i=0;$i的
其中,array_find()与PHP类似,只是它采用布尔回调函数而不是固定值。请调整匹配回调函数以适合您要查找的内容
另请参见:您使用的是哪一版本的PHP?具体来说,它是否>=5.3,以便您可以使用匿名函数?5.3.2..提供解决方案;)谢谢。。工作完美无瑕;)
/**
* 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