I have the following Array:
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
)
)
There are over 100 in the array.
Is it possible to search within the array based on location, for example, I'd like to sum Total_S
if location
contains `Central>Europe'
In MySQL you can search using LIKE
: LIKE '%Central>Europe%'
I don't know if PHP has the same functionality to do this within such an array.
Taking advantage of the new array_column() function in PHP 5.5:
$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);
EDIT
For earlier versions of PHP that don't have the array_column() function:
$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']);
}
)
)
);
(tested with 5.3.27)
EDIT #2
Modified: return = array_sum(
to 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');