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 来实现这一点!?!

感谢您的任何帮助!

-汤姆

4

3 回答 3

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'];
    }
}
于 2012-04-16T21:42:11.920 回答
1

为此,您必须使用 for 循环进行扫描。

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

你可以使用这样的算法。

于 2012-04-16T21:46:26.577 回答
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(),不同之处在于它采用布尔回调函数而不是固定值。调整匹配回调以适合您正在寻找的东西。

另请参阅:匿名函数

于 2012-04-16T21:56:08.320 回答