我有以下数组:
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在这样的数组中是否具有相同的功能。
答案 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');