【问题标题】:Search multidimensional array for value and return new array在多维数组中搜索值并返回新数组
【发布时间】:2013-08-29 13:09:57
【问题描述】:

过去几个小时一直在努力解决这个问题。尝试为一个数组构建一个搜索函数,然后吐出一个包含所有具有关键字的数组的新函数。

这是我正在使用的函数,不确定它是否朝着正确的方向前进,它返回数组中的数组,这不是我想要的。

function search_array($array, $needle) {
    $results = array();
    $hasValue = false;

    foreach ($array as $subarray) {
        foreach($subarray as $value){
            if(strpos($value,$needle) !== false)
                $hasValue = true;
        }
        if($hasValue = true)
            $results[] = $array;
    }

    return $results;
}

我正在搜索的数组结构如下:

Array
(
    [0] => Array
        (
            [ID] => 27
            [title] => Steve Jobs
            [balance] => $147
            [paid_1] => $49
            [date_1] => 26 August, 2013
            [paid_2] => $49
            [date_2] => 26 August, 2013
            [paid_3] => $49
            [date_3] => 26 August, 2013
        )

    [1] => Array
        (
            [ID] => 26
            [title] => Bill Gates
            [balance] => $300
            [paid_1] => $100
            [date_1] => 25 August, 2013
            [paid_2] => $100
            [date_2] => 25 August, 2013
            [paid_3] => $100
            [date_3] => 25 August, 2013
        )

)

我希望使用从搜索表单中输入的数据,然后找到任何输入了关键字的数组。例如,搜索“Bill”将返回一个新数组和任何其他包含“Bill”的数组,其结构如下:

Array
(

    [0] => Array
        (
            [ID] => 26
            [title] => Bill Gates
            [balance] => $300
            [paid_1] => $100
            [date_1] => 25 August, 2013
            [paid_2] => $100
            [date_2] => 25 August, 2013
            [paid_3] => $100
            [date_3] => 25 August, 2013
        )

)

我在这里阅读了其他一些帖子,做类似的事情,尤其是这个:How to search by key=>value in a multidimensional array in PHP 这似乎很接近,除了我想只搜索字符串中的值而不是键。任何帮助是极大的赞赏。

【问题讨论】:

    标签: php arrays search multidimensional-array


    【解决方案1】:

    您的功能似乎几乎没问题,除了:

    • 在调用 strpos 之前不要检查值是否为字符串
    • 您在结果中分配 $array 而不是 $subarray
    • 您不要将 $hasValue 变量重置为 false
    • 您在最后的 if 语句中将 value boolean true 分配给 $hasValue 变量,而不是与 true 进行比较。

    我相信这应该可行:

    function search_array($array, $needle) {
        $results = array();
    
        foreach ($array as $subarray) {
            $hasValue = false;
            foreach($subarray as $value){
                if(is_string($value) && strpos($value,$needle) !== false)
                    $hasValue = true;
            }
            if($hasValue)
                $results[] = $subarray;
        }
    
        return $results;
    }
    

    还有另一个版本可以让您不必每次都遍历整个子数组:

    function search_array($array, $needle) {
        $results = array();
    
        foreach ($array as $subarray) {
            foreach($subarray as $value){
                if(is_string($value) && strpos($value,$needle) !== false) {
                    $results[] = $subarray;
                    break;
                }
            }
        }
    
        return $results;
    }
    

    请注意,如果您在其中一个值而不是子字符串中寻找完全匹配,您可以使用 array_search() 函数来代替:

    function search_array($array, $needle) {
        $results = array();
    
        foreach ($array as $subarray) {
            if (array_search($needle, $subarray, true) !== false) {
                $results[] = $subarray;
            }
        }
    
        return $results;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-04-16
      • 2014-11-11
      • 1970-01-01
      • 2016-01-14
      • 1970-01-01
      • 1970-01-01
      • 2013-02-19
      相关资源
      最近更新 更多