Мне не нужно передавать ссылку. Мне нужно совсем другое. Не надо пытаться подменить задачу только для того, чтобы код соответствовал выученной вами догме.
Вы раньше производили впечатление адекватного человека, но сейчас я вижу что вы просто повторяете заученные религиозные догмы. Поскольку в большинстве случаев это работает, то отсутствие реального понимания не так бросалось в глаза.
Как я уже говорил, аргументы против религии бесполезны, так что всего хорошего
https://3v4l.org/i5RPC
foreach ($array as $i => &$v) {
if ($i === 0) {
$array[1] = 3;
}
echo "$i: $v\n";
}
Переменная инициализирована.
Читайте внимательнее. Мне надо не для изменения. А для изменения, которое видно сразу, на по окончании перебора.
Разумеется должна быть. Она там и есть. А эта строчка лишняя.
Верно, именно поэтому замечание про "более лучше производительный" не имеет смысла и является скорее вредным, поскольку создает классическое суеверие.
не нужно.
нужно использовать то, что подходит для конкретной задачи
если я, к примеру, хочу изменять значения массива и при этом видеть изменения сразу, то нужно использовать обращение по ключу.
ну если так не видите, то просто уберите её из кода, и запустите его :)
Это не то замедление, о котором вообще стоит говорить.
Вы его увидите только на цикле, который вообще нихчего не делает. Во всех остальных случаях вы его с электронным микроскопом не увидите.
Бессмысленность строчки $result[$key] = []; - это для вас "тайное знание"? :)
ну это сказки же.
и у вас тоже ненужные присвоения (:
$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