2

別の配列のキーに基づいて配列をフィルタリングする関数がphpに組み込まれているかどうか疑問に思っていましたか?

配列 1 - すべてのユーザーとその基本情報のリストです

配列 2 - ユーザー ID の会議スケジュールが含まれています

例えば

array 1 [0]([user_id], [name], [age], [contact]), 
        [1]([user_id], [name], [age], [contact])
        etc.

array 2 [0]([user_id], [time], [date], [place])
        [1]([user_id], [time], [date], [place])

配列 1 をフィルター処理して、配列 2 の [user_id] に対応する行のみが含まれるようにする方法はありますか?

これを実現するためにループとカスタム関数を使用できることは理解していますが、簡単な方法があるかどうかを確認したかっただけです。

ありがとう

4

2 に答える 2

2
array_intersect_key($array1, $array2)

PHP マニュアル

コード:

$array1 = array('user1'=> array('name'=>'name1','age' => 'age1'),
                'user2'=> array('name'=>'name2','age' => 'age2'),
                'user3'=> array('name'=>'name3','age' => 'age3'));

//array with key to search for
$array2 = array('user2'=> array('time'=>'time2','date' => 'date2'));     
echo '<pre>';
print_r(array_intersect_key($array1,$array2));
echo '</pre>';

o/p:

    Array
(
    [user2] => Array
        (
            [name] => name2
            [age] => age2
        )

)

編集:

ああ、問題があります。上記の構造に従って指定された配列を操作し、array_intersect_key() を適用する場合は、次のようにします。

function compare($key1,$key2){
    global $array1,$array2;

    if($array1[$key1]['userid'] == $array2[$key2]['userid'])
        return 0;
    if($array1[$key1]['userid'] > $array2[$key2]['userid'])
        return 1;
    else
        return -1;
}

$array1 = array(array('userid'=>'user1','name'=>'name1','age' => 'age1'),
                array('userid'=>'user2','name'=>'name2','age' => 'age2'),
                array('userid'=>'user3','name'=>'name3','age' => 'age3'));

//array with key to search for
$array2 = array(array('userid'=>'user2','time'=>'time2','date' => 'date2'));     

echo '<pre>';
print_r(array_intersect_ukey($array1,$array2,'compare'));
echo '</pre>';

o/p:
====
Array
(
    [1] => Array
        (
            [userid] => user2
            [name] => name2
            [age] => age2
        )

)
于 2013-04-10T17:56:35.337 に答える
1

2 つのループを使用する方がはるかに簡単であると判断しました。

[user_id] の配列を作成する最初のものと in_array を使用する 2 番目のものは、次のようになります。

$user_id = array();
foreach($users as $id){
    $user_id[]= $id['user_id'];
}
$names = array();
foreach ($schedule as $name){
    if(in_array($name['id'], $user_id)) $names[] = $name;
}

単純すぎて PHP 関数を探すのが面倒です。

于 2013-04-11T07:53:40.883 に答える