【问题标题】:php array search key & value by value form other arrayphp数组从另一个数组中按值搜索键和值
【发布时间】:2020-11-25 16:46:48
【问题描述】:

我有一个这样的引用数组(数据量是动态的,大约3000条记录)

Array
(
    [0] => Array
        (
            [DEPT] => FIN
            [KEYCODE] => AAAAA
            [TYPE] => 7
        )

    [1] => Array
        (
            [DEPT] => SALE
            [KEYCODE] => BBBBB
            [TYPE] => 16
        )

    [2] => Array
        (
            [DEPT] => SCM
            [KEYCODE] => CCCCC
            [TYPE] => 1
        )
)

并使用“TYPE”的值搜索键“[9][7][16][1]”和“KEYCODE”的值在以下数组中搜索上述键的值。 (动态,约 5000 条记录)

Array
(
    [0] => Array
        (
            [NAME] => Nick
            [9] => GGGGG
            [7] => AAAAA
            [16] => MMMMM
            [1] => KKKKK
        )
    [1] => Array
        (
            [NAME] => Chris
            [9] => PPPPP
            [7] => BBBBB
            [16] => ZZZZZ
            [1] => RRRRR
        )
    [2] => Array
        (
            [NAME] => Cathy
            [9] => SSSSS
            [7] => UUUUU
            [16] => JJJJJ
            [1] => AAAAA
        )
    [3] => Array
        (
            [NAME] => Allen
            [9] => FFFFF
            [7] => DDDDD
            [16] => WWWWW
            [1] => CCCCC
        )
)

输出数组应该是

Array
(
    [0] => Array
        (
            [NAME] => Chris
            [9] => PPPPP
            [7] => HHHHH
            [16] => ZZZZZ
            [1] => RRRRR
        )
    [1] => Array
        (
            [NAME] => Cathy
            [9] => SSSSS
            [7] => UUUUU
            [16] => JJJJJ
            [1] => XXXXX
        )
)

“尼克”有项目 [7]=> AAAAA 和“艾伦”有项目 [1]=> CCCCC,所以从数据数组中删除。 我知道删除数组项的方法,但不知道如何通过其他数组的键/值对来实现比较和搜索。

【问题讨论】:

  • 如果我没记错的话,如果搜索功能匹配[KEYCODE]和[TYPE],你想从第二个数组中删除项目??
  • 是的,如果找到[KEYCODE]和[TYPE]的完全匹配项,删除[NAME] [9] [7] [16] [1]
  • 您想根据TYPE从第一个数组中找到KEYCODE,然后根据找到的KEYCODE删除第二个数组中的整条记录吗?同一个TYPE 可以有多个KEYCODE 值吗?
  • [TYPE, KEYCODE] 在第一个数组是唯一的。但是在第二个数组中可能有相同的“TYPE”但不同的“KEYCODE”,我编辑了第二个数组以获得更接近真实数据的数组。

标签: php multidimensional-array


【解决方案1】:

我从您的问题中了解到,这是您所需任务的简单解决方案:

    $firstArr = array(
        0 => array(
            "DEPT" => 'FIN',
            'KEYCODE' => 'AAAAA',
            'TYPE' => 7
        ),
        1 => array(
            'DEPT' => 'SALE',
            'KEYCODE' => 'BBBBB',
            'TYPE' => 16
        ),
        2 => array(
            'DEPT' => 'SCM',
            'KEYCODE' => 'CCCCC',
            'TYPE' => 1
        )
    );

    $secondArr = array(
        0 => array(
            'NAME' => 'Nick',
            9 => 'GGGGG',
            7 => 'AAAAA',
            16 => 'MMMMM',
            1 => 'KKKKK',
        ),
        1 => array(
            'NAME' => 'Chris',
            9 => 'PPPPP',
            7 => 'HHHHH',
            16 => 'ZZZZZ',
            1 => 'RRRRR'
        ),
        2 => array(
            'NAME' => 'Cathy',
            9 => 'SSSSS',
            7 => 'UUUUU',
            16 => 'JJJJJ',
            1 => 'XXXXX'
        ),
        3 => array(
            'NAME' => 'Allen',
            9 => 'FFFFF',
            7 => 'DDDDD',
            16 => 'WWWWW',
            1 => 'CCCCC'
        )
    );

    foreach($firstArr as $row){
        foreach($secondArr as $i => $que){
            if(array_key_exists($row['TYPE'], $que) && $row['KEYCODE'] == $que[$row['TYPE']]){
                unset($secondArr[$i]); // deleting selected item from the array...
            }
        }
    }

    echo '<pre>'; 
    print_r($secondArr);
    echo '</pre>';

以上代码的输出:

Array
(
    [1] => Array
    (
        [NAME] => Chris
        [9] => PPPPP
        [7] => HHHHH
        [16] => ZZZZZ
        [1] => RRRRR
    )

[2] => Array
    (
        [NAME] => Cathy
        [9] => SSSSS
        [7] => UUUUU
        [16] => JJJJJ
        [1] => XXXXX
    )

)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-27
    • 2017-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-05
    相关资源
    最近更新 更多