【问题标题】:PHP search multidimensional array for substringPHP在多维数组中搜索子字符串
【发布时间】:2012-09-12 04:23:12
【问题描述】:

我正在尝试在 2 层数组的底层的一部分中搜索子字符串,并从顶层返回键。例如。在下面的数组中,在“A”中搜索“ca”将返回“0”和“2”(但会错过“cattle”):

Array (
    [0] => Array (
        [A] => cat
        [B] => horses
        )
    [1] => Array (
        [A] => dog
        [B] => cattle
    )
    [2] => Array (
        [A] => cat
        [B] => sheep
    )
) 

【问题讨论】:

  • 两种方式:首先,循环抛出第 1 层数组中的所有元素,然后测试第 2 层元素中的值,或者将数组转换为仅一维数组。
  • @Eric - 我目前的方法有效(适用于非常有限数量的应用程序),但不够灵活且过于繁琐。我不会详细介绍您,但它涉及生成一个可能的字符串数组(它使用 in_array,因此不适用于子字符串)并搜索这些字符串。我不想再生成这个数组。
  • @FIG-GHD742 - 谢谢,但你能举一个第一种方法的例子吗?我一直在使用 foreach 循环和 in_array,但它正在搜索我无法工作的子字符串

标签: php arrays substring


【解决方案1】:

你可以这样试试:

$array = array(
    array(
        "A" => "cat",
        "B" => "horse"
    ),
    array(
        "A" => "dog",
        "B" => "cattle"
    ),
    array(
        "A" => "cat",
        "B" => "sheep"
    ),
);

$result = mySearch($array, "A", "ca");

function mySearch($array, $key, $search)
{
    $results = array();
    foreach ($array as $rootKey => $data) {
        if (array_key_exists($key, $data)) {
            if (strncmp($search, substr($data[$key], 0, 2), strlen($search)) == 0) {
                $results[] = $rootKey;
            }
        }
    }
    return $results;
}

var_dump($result);

将输出:

array(2) {
  [0]=>
  int(0)
  [1]=>
  int(2)
}

请注意,此方法编码不安全(您可以使用 mb_str* 代替 str* 函数系列,更多详细信息here)。

【讨论】:

  • @user1684046 这是我的第一种方法循环的好方法,如您所见,我们使用 foreach 循环 for 循环将所有项目扔到第一维数组中。然后测试每个孩子的选择数据。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多