📜  php 在多维数组中搜索多个值 - PHP (1)

📅  最后修改于: 2023-12-03 15:18:28.150000             🧑  作者: Mango

在多维数组中搜索多个值 - PHP

在PHP中,我们经常需要在多维数组中搜索多个值,以找出符合条件的项。本文将介绍两种方法来实现这个功能。

方法一:使用递归函数

我们可以编写一个递归函数来搜索多维数组中的值。该函数将接受两个参数,第一个参数为需要搜索的数组,第二个参数为需要查找的值。

function searchArray($array, $value) {
    $results = array();
    foreach ($array as $subarray) {
        if (is_array($subarray)) {
            $results = array_merge($results, searchArray($subarray, $value));
        } else {
            if ($subarray == $value) {
                $results[] = $subarray;
            }
        }
    }
    return $results;
}

我们可以使用该函数在多维数组中搜索一个值:

$array = array(
    array('name' => 'John', 'age' => 25),
    array('name' => 'Amy', 'age' => 30),
    array('name' => 'Bob', 'age' => 25)
);

$results = searchArray($array, 25);

print_r($results);

输出:

Array
(
    [0] => 25
    [1] => 25
)

但是如果我们需要搜索多个值呢?我们可以对函数进行修改,使其接受一个数组作为第二个参数,然后对数组中的每个值都进行搜索。

function searchArray($array, $values) {
    $results = array();
    foreach ($array as $subarray) {
        if (is_array($subarray)) {
            $results = array_merge($results, searchArray($subarray, $values));
        } else {
            if (in_array($subarray, $values)) {
                $results[] = $subarray;
            }
        }
    }
    return $results;
}

我们可以使用该函数在多维数组中搜索多个值:

$array = array(
    array('name' => 'John', 'age' => 25),
    array('name' => 'Amy', 'age' => 30),
    array('name' => 'Bob', 'age' => 25)
);

$results = searchArray($array, array(25, 'Amy'));

print_r($results);

输出:

Array
(
    [0] => 25
    [1] => 25
    [2] => Amy
)
方法二:使用array_filter函数

另一种方法是使用PHP内置的array_filter函数。该函数将接受两个参数,第一个参数为需要搜索的数组,第二个参数为一个自定义的函数,该函数将根据给定条件返回一个布尔值。array_filter函数将遍历数组的每个元素,并将每个元素传递给自定义的函数进行测试。如果测试返回true,则该元素将包含在结果数组中。

我们可以编写一个自定义的函数,在该函数中对给定的值进行测试:

function searchValues($value) {
    return in_array($value, array(25, 'Amy'));
}

我们可以使用该函数和array_filter函数在多维数组中搜索多个值:

$array = array(
    array('name' => 'John', 'age' => 25),
    array('name' => 'Amy', 'age' => 30),
    array('name' => 'Bob', 'age' => 25)
);

$results = array_filter($array, function($subarray) {
    return array_filter($subarray, 'searchValues');
});

print_r($results);

输出:

Array
(
    [0] => Array
        (
            [name] => John
            [age] => 25
        )

    [1] => Array
        (
            [name] => Amy
            [age] => 30
        )

    [2] => Array
        (
            [name] => Bob
            [age] => 25
        )

)
总结

本文介绍了在PHP中在多维数组中搜索多个值的两种方法。第一种方法是使用递归函数,该函数将遍历整个数组,并在每个元素上进行测试,以查找符合条件的项。第二种方法是使用PHP内置的array_filter函数,该函数将遍历数组的每个元素,并将每个元素传递给自定义的函数进行测试。无论你使用哪种方法,请根据你的具体需求做出选择。