#php #arrays
#php #массивы
Вопрос:
Ну, у меня есть этот массив $city :
Array
(
[0] => Array
(
[0] => fr
[1] => paris
[2] => FR-J
[3] => 0
[4] => 116729
[5] => 0
[6] => 0
)
[1] => Array
(
[0] => fr
[1] => marseille
[2] => FR-U
[3] => 0
[4] => 12898
[5] => 0
[6] => 0
)
[2] => Array
(
[0] => fr
[1] => lyon
[2] => FR-V
[3] => 0
[4] => 8608
[5] => 0
[6] => 0
)
[3] => Array
(
[0] => fr
[1] => nice
[2] => FR-U
[3] => 0
[4] => 6838
[5] => 0
[6] => 0
)
И так далее … И я хотел бы суммировать $city [$key] [4] и генерировать что-то вроде этого:
Array
(
[0] => Array
(
[0] => FR-J
[1] => 116729
)
[1] => Array
(
[0] => FR-U
[1] => 19736
)
[2] => Array
(
[0] => FR-V
[1] => 8608
)
Вот как я пытаюсь это сделать :
$totals = array();
foreach ($city as $key => $value) {
if (isset($city[$key][3])){
$totals[$key][0] = $city[$key][2];
$totals[$key][1] = (int) $city[$key][4]; \ <-- this line
} else {
$totals[$key][0] = $city[$key][2];
$totals[$key][1] = (int) $city[$key][4];
}
}
Но вместо этого он генерирует этот массив, но с суммами и Undefined offset: 1
в прокомментированной строке. Как я могу это сделать? Очень признателен.
Комментарии:
1. измените отмеченную строку следующим образом: if(!isset($ totals[$key][1])) $totals[$key][1] = 0; $totals[$key][1] = (int) $city[$key][4];
2.
$city[$key][4];
должно быть$city[$key][3];
потому, что индекс массива начинается с0
Ответ №1:
$sum = [];
foreach($city as $value) {
if(!isset($sum[$value[2]]))
$sum[$value[2]] = 0;
$sum[$value[2]] = $value[4];
}
$results = [];
foreach($sum as $key => $value)
$results[] = [$key,$value];
print_r($results);
Комментарии:
1. Извините, это не совсем работает! Можете ли вы предоставить codepad или онлайн-тестер?
Ответ №2:
Почему бы вам сначала не установить его, инициализировать его нулем. Чтобы у вас не было неопределенных ошибок индекса. Рассмотрим этот пример:
$new_values = array();
foreach($original_values as $key => $value) {
if(!isset($new_values[$value[2]][1])) $new_values[$value[2]][1] = 0;
$new_values[$value[2]][0] = $value[2];
$new_values[$value[2]][1] = $value[4];
}
$new_values = array_values($new_values);
Ответ №3:
Это решит вашу проблему.
$new_values = array();
foreach($original_values as $key => $value) {
if(false == isset($new_values[$value[2]][1])) {
$new_values[$value[2]][1] = 0;
}
$new_values[$value[2]][0] = $value[2];
$new_values[$value[2]][1] = $value[4];
}
$new_values = array_values($new_values);
Также используйте скобки в операторе if, это лучшая практика в нашем сообществе.
Ответ №4:
попробуйте это:
$totals = array();
foreach ($city as $key => $value) {
$totals[$key][0] = $city[$key][2];
if(!isset($totals[$key][1]))
$totals[$key][1] = 0;
$totals[$key][1] = (int) $city[$key][4];
}
Комментарии:
1. Хотя этот блок кода может ответить на вопрос, было бы лучше, если бы вы могли дать небольшое объяснение, почему он это делает.
2. Определенное по умолчанию смещение 1 означает, что в вашем массиве $total нет элемента с [$key][1] . Вы пытаетесь добавить число к элементу, который не существует. Итак, в моем примере я создаю этот элемент и инициирую с 0 в случае, если он не существует.