php在多维数组中进行部分键搜索并删除过时的数组级别

时间:2014-01-14 10:08:46

标签: php arrays partial

在查看关于php数组的许多已经问过的问题后,我仍然无法解决我的问题。

我的目标是搜索数组以进行部分匹配,并将这些结果存储到新数组中。我正在使用的数据是国家信息,地区信息和城市信息。

我有3个SQL查询返回如下数据: [名称] [动作] [值] 阿姆斯特丹,城市,阿姆斯特丹 荷兰,国家,NL 荷兰,国家,NL

检索结果,然后使用

将其合并到一个数组中
$smartsearcharray = array();
array_push($smartsearcharray, $results_countries);
array_push($smartsearcharray, $results_provinces);
array_push($smartsearcharray, $results_cities);

但阵列看起来像

Array
(
[0] => Array
    (
        [0] => Array
            (
                [name] => andorra
                [action] => country
                [value] => AD
            )

        [1] => Array
            (
                [name] => argentina
                [action] => country
                [value] => AR
            )

[1] => Array
    (
        [0] => Array
            (
                [name] => canillo
                [action] => province
                [value] => AD-02
            )

        [1] => Array
            (
                [name] => andorra la vella
                [action] => province
                [value] => AD-07
            )

尝试合并数组0和数组1,因为它们包含相同的结构,并且使用RecursiveIteratorIterator失败

我尝试使用strpos,preg_grep和组合递归地进行array_walk,但由于额外的数组维度,它们经常失败。

我应该使用哪些功能或技术建议才能使其正常工作?

非常感谢

/ edit:解决方案

$res_arr = array();

foreach($smartsearcharray as $item)
{
    if(stripos($item['name'], $search_word) !== false) {

    $res_arr[] = array(
            'name'      => $item['name'],
            'action'    => $item['action'],
            'value'     => $item['value']
            );
    }
}

print_r($res_arr);

1 个答案:

答案 0 :(得分:0)

第1部分,通过数组合并而不是array_push

求解数组
$results_countries = $this->model_search_smartsearch->buildCountries();
$results_provinces = $this->model_search_smartsearch->buildProvinces();
$results_cities = $this->model_search_smartsearch->buildCities();

$smartsearcharray = array();
$smartsearcharray = array_merge($results_countries, $results_provinces, $results_cities );

第2部分,搜索数组值,如果匹配则将信息存储在较小/新数组中

$res_arr = array();

foreach($smartsearcharray as $item)
{
    if(stripos($item['name'], $search_word) !== false) {

    $res_arr[] = array(
            'name'      => $item['name'],
            'action'    => $item['action'],
            'value'     => $item['value']
            );
    }
}

print_r($res_arr);