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 に答える