📜  PHP多维数组按值搜索(1)

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

PHP多维数组按值搜索

在PHP中,多维数组是一种非常常见的数据结构类型。当需要在一个大的数组中查找某个值时,针对多维数组进行按值搜索可能会变得复杂一些。本文将介绍如何使用PHP多维数组按值搜索的方法。

方法一:使用递归

可以使用递归的方法来搜索多维数组中的值。以下是一个使用递归方法搜索多维数组值的示例:

function searchArray($array, $searchString) {
    foreach ($array as $key => $value) {
        if (is_array($value)) {
            $result = searchArray($value, $searchString);
            if ($result) {
                return array($key, $result);
            }
        } else {
            if ($value === $searchString) {
                return array($key, $value);
            }
        }
    }
    return null;
}

上面的代码中,$array参数是指要搜索的多维数组,$searchString参数是要搜索的值。对于每个数组元素,函数会检查其是否为数组类型,如果是,则递归调用自身,并将子数组作为参数传递。如果不是,则检查该元素是否与搜索值相同。

该函数返回一个数组,包含找到的值以及它们的键名。如果搜索不到,则返回null

示例

以下是一个使用上述searchArray函数的示例:

$array = array(
    'key1' => 'value1',
    'key2' => array(
        'key3' => 'value2',
        'key4' => 'value3'
    ),
    'key5' => 'value4'
);
$result = searchArray($array, 'value2');
print_r($result);

输出的结果如下所示:

Array
(
    [0] => key3
    [1] => value2
)
方法二:使用array_walk_recursive函数

PHP提供了一个名为array_walk_recursive的内置函数,可以帮助查询多维数组。以下是一个使用array_walk_recursive函数搜索多维数组中的值的示例:

function searchArray($array, $searchString) {
    $result = null;
    array_walk_recursive($array, function($value, $key) use ($searchString, &$result) {
        if ($value === $searchString) {
            $result = array($key, $value);
        }
    });
    return $result;
}

上述代码中,$array参数是指要搜索的多维数组,$searchString参数是要搜索的值。array_walk_recursive函数会遍历整个数组并调用一个回调函数,其接受当前元素和对应的键名作为参数。回调函数会检查当前元素是否与搜索值相同,并在找到匹配时将结果保存在一个变量中。

函数返回一个数组,其中包含找到的值以及它们的键名。如果搜索不到,则返回null

示例

以下是一个使用上述searchArray函数的示例:

$array = array(
    'key1' => 'value1',
    'key2' => array(
        'key3' => 'value2',
        'key4' => 'value3'
    ),
    'key5' => 'value4'
);
$result = searchArray($array, 'value2');
print_r($result);

输出的结果如下所示:

Array
(
    [0] => key3
    [1] => value2
)
总结

本文介绍了两种在PHP中按值搜索多维数组的方法。第一种方法是使用递归,第二种方法是使用PHP内置函数array_walk_recursive。无论使用哪种方法,都应该是在处理多维数组时的常见操作。