ну это сказки же.
и у вас тоже ненужные присвоения (:
$result = [];
foreach ($arr as $obj) {
$idPublic = $obj['id_public'];
if (isset($result[$idPublic])) {
$result[$idPublic]['number'] = ($result[$idPublic]['number']+$obj['number'])/2;
} else {
$result[$idPublic] = [
'id_public' => $idPublic,
'number' => $obj['number'],
];
}
}
$result = [];
foreach ($arr as $obj) {
$idPublic = $obj['id_public'];
if (isset($result[$idPublic])) {
$result[$idPublic] = ($result[$idPublic]+$obj['number'])/2;
} else {
$result[$idPublic] = $obj['number'];
}
}
foreach ($input as $i => $key) {
$result[$key] = [];
foreach ($params as $j => $param) {
$result[$key][$param] = $arrays[$j][$i];
}
}
Временный он потому что он действует пока открыта страница в браузере или пока есть соединение в самим сокетом.
нормализация - это серебряная пуля и панацея. Один из ключевых принципов архитектуры.
И не надо ставить денормализацию на одну доску с ней. Это не принцип проектирования баз данных, а компромисс, который никогда не закладывается исходно, а добавляется сильно позже, когда (если) возникают проблемы с производительностью.
Чем схема плоха, я наглядно показал в своем ответе - при нормальной схеме - когда номер счетчика уходит в условие, где он и должен быть - сразу пропадает ВЕСЬ этот говнокод, и делается простой запрос апдейт.
UPDATE `list`
SET count1 = CASE WHEN id = ? AND ? = 1 THEN count1 - ? ELSE count1 END,
count2 = CASE WHEN id = ? AND ? = 2 THEN count2 - ? ELSE count2 END,
count3 = CASE WHEN id = ? AND ? = 3 THEN count3 - ? ELSE count3 END
WHERE id = ?
UPDATE `list`
SET count1 = CASE WHEN id = :id_part1 AND :id_part2 = 1 THEN count1 - :count ELSE count1 END,
count2 = CASE WHEN id = :id_part1 AND :id_part2 = 2 THEN count2 - :count ELSE count2 END,
count3 = CASE WHEN id = :id_part1 AND :id_part2 = 3 THEN count3 - :count ELSE count3 END
WHERE id = :id_part1
const COLUMNS = [
1 => 'column1',
2 => 'column2',
3 => 'column3',
];
$column = COLUMNS[$id[1]];
UPDATE `list` SET $column = $column - :count WHERE `id` = :id_part1
$column = 'count' . (int)$columnNumber;
const COLUMNS = [
1 => 'column1',
2 => 'column2',
3 => 'column3',
];
if (!isset(COLUMNS[$id])) {
throw new \InvalidColumnException();
}
$column = COLUMNS[$id];
Я не админ, так понимаю лежит сервер БД
Есть такое выражение "экономить на спичках", когда мы начинаем оптимизировать то, что и так работает быстро, путем усложнения кода или других жертв. Здесь не тот случай, здесь просто ошибка, т.к. для обхода массива нужно использовать итератор.
Да, не вижу как можно без нее обойтись. Покажите?