在多维数组中搜索

时间:2014-03-11 17:32:55

标签: php search multidimensional-array sum

我有以下数组:

Array 
( 
    [0] => Array 
    ( 
        [location] => Central>Europe>Italy
        [Total_S] => 4 
        [Total_R] => 0 
    ) 
)

Array 
( 
    [1] => Array 
    ( 
        [location] => Central>Europe>Spain
        [Total_S] => 4 
        [Total_R] => 0 
    ) 
)

阵列中有超过100个。

是否可以根据位置在数组中进行搜索,例如,如果Total_S包含“中心>欧洲”,我想求和 location

在MySQL中,您可以使用LIKE进行搜索:LIKE '%Central>Europe%'

我不知道PHP在这样的数组中是否具有相同的功能。

1 个答案:

答案 0 :(得分:2)

利用PHP 5.5中新的array_column()函数:

$data = array(
    array( 
        'location' => 'Central>Europe>Italy',
        'Total_S' => 4,
        'Total_R' => 0,
    ),
    array( 
        'location' => 'Central>Europe>Spain',
        'Total_S' => 4,
        'Total_R' => 0,
    ),
    array( 
        'location' => 'Central>Africa>Egypt',
        'Total_S' => 4,
        'Total_R' => 0,
    ),
);
$search = 'Central>Europe>*';

$sum = array_sum(
    array_column(
        array_filter(
            $data,
            function($value) use ($search) {
                return fnmatch($search, $value['location']);
            }
        ),
        'Total_S'
    )
);
var_dump($sum);

修改

对于没有array_column()函数的早期版本的PHP:

$column = 'Total_S';
$sum = array_sum(
    array_map(
        function($value) use ($column) {
            return $value[$column];
        },
        array_filter(
            $data,
            function($value) use ($search) {
                return fnmatch($search, $value['location']);
            }
        )
    )
);

(用5.3.27测试)

编辑#2

已修改return = array_sum( return array_sum(

$searchSubset = array_filter(
    $data,
    function($value) use ($search) {
        return fnmatch($search, $value['location']);
    }
);
function summer($data, $column) {
    return array_sum(
        array_map(
            function($value) use ($column) {
                return $value[$column];
            },
            $data
        )
    );
}
$sumS = summer($searchSubset, 'Total_S');
$sumR = summer($searchSubset, 'Total_R');