Пожалуйста, обратитесь к следующему массиву в PHP:
$array1 = array(
array('location'=>'AA','time_spent'=>2),
array('location'=>'BB','time_spent'=>2),
array('location'=>'AA','time_spent'=>3),
array('location'=>'CC','time_spent'=>2),
array('location'=>'CC','time_spent'=>2),
array('location'=>'AA','time_spent'=>1)
);
Здесь я хочу рассчитать общее время, которое он провел в каждом конкретном месте, то есть накопить значение ключа time_spent
если ключ для location
такой же. А затем записать его в новый ассоциативный массив (скажем, $place_array
) со значениями, связанными с ключами location
а также total_time
,
Таким образом, выходной массив должен быть
$place_array = array(
array('location'=>'AA','time_spent'=>6),
array('location'=>'BB','time_spent'=>2),
array('location'=>'CC','time_spent'=>4)
);
Мой ответ показывает вам, как я получу нужный вам массив, а также фактический массив, который я использовал бы, если бы я был кодирующим. Если бы все, что мне было нужно, это сводка мест и общего потраченного времени, я бы имел дело с более компактным массивом, в котором не нужно было хранить метки. В любом случае, если вы не хотите использовать итоговый бит, просто удалите его, если считаете, что эта версия более компактна 🙂
$journey = array(
array('location'=>'AA','time_spent'=>2),
array('location'=>'BB','time_spent'=>2),
array('location'=>'AA','time_spent'=>3),
array('location'=>'CC','time_spent'=>2),
array('location'=>'CC','time_spent'=>2),
array('location'=>'AA','time_spent'=>1)
);
$summary = Array();
$full = Array();
foreach($journey as $map){
// Your version
if(!isset($full[$map["location"]])){
$full[$map["location"]] = $map;
} else {
$full[$map["location"]]["time_spent"] += $map["time_spent"];
}
// Summary version (leaner)
$summary[$map["location"]] = (isset($summary[$map["location"]])?$summary[$map["location"]]:0)+$map["time_spent"];
}
// Summary result
print "<pre>";
print_r($summary);
print "</pre>";
// Your result
print "<pre>";
print_r(array_values($full));
print "</pre>";
Выход
Array
(
[AA] => 6
[BB] => 2
[CC] => 4
)
Array
(
[0] => Array
(
[location] => AA
[time_spent] => 6
)
[1] => Array
(
[location] => BB
[time_spent] => 2
)
[2] => Array
(
[location] => CC
[time_spent] => 4
)
)
Привет, ты можешь попробовать это.
Я создал новый массив $result
с его ключом в качестве местоположения сказать AA
и в этом у меня есть сохранить массив, который имеет местоположение как AA
и его время, проведенное в следующий раз, когда я проверяю, если местоположение AA
затем добавьте время, потраченное на предыдущее, а если нет, то добавьте новое. В последний раз я использовал array_values
поменять ключи
<?php
$array1 = array(array('location'=>'AA','time_spent'=>2),array('location'=>'BB','time_spent'=>2),array('location'=>'AA','time_spent'=>3),array('location'=>'CC','time_spent'=>2),array('location'=>'CC','time_spent'=>2),array('location'=>'AA','time_spent'=>1));
$result = array();
foreach($array1 as $new){
if (array_key_exists($new['location'],$result)){
$result[$new['location']]['time_spent'] += $new['time_spent'];
}
else{
$result[$new['location']] = $new;
}
}
$final = $new_array=array_values($result);
echo "<pre>";print_r($final);
Выход
Array
(
[0] => Array
(
[location] => AA
[time_spent] => 6
)
[1] => Array
(
[location] => BB
[time_spent] => 2
)
[2] => Array
(
[location] => CC
[time_spent] => 4
)
)
<?php
$array1 = array(
array('location'=>'AA','time_spent'=>2),
array('location'=>'BB','time_spent'=>2),
array('location'=>'AA','time_spent'=>3),
array('location'=>'CC','time_spent'=>2),
array('location'=>'CC','time_spent'=>2),
array('location'=>'AA','time_spent'=>1)
);
$place_array = array();
foreach ($array1 as $key => $value) {
if(isset($place_array[$value['location']]))
$place_array[$value['location']]['time_spent'] += $value['time_spent'];
else
$place_array[$value['location']] = $value;
}
$place_array = array_values($place_array);
echo '<pre>';
print_r($place_array);
echo '</pre>';
?>
Выход
Array
(
[0] => Array
(
[location] => AA
[time_spent] => 6
)
[1] => Array
(
[location] => BB
[time_spent] => 2
)
[2] => Array
(
[location] => CC
[time_spent] => 4
)
)