string(275) "Хомут обжимной просечной (оцинкованная сталь) ширина 8 мм 3/4" (13-19 мм) – купить по цене завода. Доставка по РФ. Смотреть характеристики, фото, отзывы."string(271) "Хомут обжимной просечной (оцинкованная сталь) ширина 8 мм 3/4" (13-19 мм) – купить по цене завода. Доставка по РФ. Смотреть характеристики, фото, отзывы."Мне не нужно передавать ссылку. Мне нужно совсем другое. Не надо пытаться подменить задачу только для того, чтобы код соответствовал выученной вами догме.
Вы раньше производили впечатление адекватного человека, но сейчас я вижу что вы просто повторяете заученные религиозные догмы. Поскольку в большинстве случаев это работает, то отсутствие реального понимания не так бросалось в глаза.
Как я уже говорил, аргументы против религии бесполезны, так что всего хорошего
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];
}
}
Можно так. В этой схеме слабое звено, что мы считаем кол-во выполненных заданий, а не знаем какие выполнены. Если поставим инкрементацию кол-ва выполненных до финализации задачи в очереди, то при сбоях в воркере (если он упал после инкрементации, но до финализации задачи) кол-во выполненных может быть больше реального кол-ва задач, некрасиво, но работу не нарушит. Можно фиксировать id выполненных задач, а не просто их считать, тогда не будет расхождений, но особой нужды наверное в этом нет.
Надо учитывать, что когда происходит инкрементация кол-ва, фактически задача воркера уже выполнена, если он потом не сможет ее финализировать, а сделает это позже, это не важно. Т.е. повторное выполнение той же самой задачи воркером никак не должно нам мешать.
Но лучше смотреть не на задачи в очереди, а на выполненную работу. Допустим задачи меняют данные в строчках таблицы, тогда добавляем к каждой строчке updated_at или version, а некий демон периодически или по сигналу проверяет, что какие-то строчки обновились и для них нужно выполнить какие-то действия. Т.е. опираться на бизнесовые изменения, а не на техническую очередь.
красиво, производительно и универсально сразу только у теоретиков выходит, на практике решение которое сегодня кажется отличным, завтра может принести множество проблем, из-за банальной ошибки или просто изменятся требования. так что не обращайте внимания, кто что сказал, если в этих словах не видите ничего полезного для себя.
Я бы не был столь категоричным. Прям менеджер воркеров, не для сбора инфы с воркеров, а который управляет ими, это не очень тривиальная штука. Самый простой и эффективный вариант - это запуск воркеров через systemd unit, там же прописать их перезапуск при сбое. Упадет воркер - не проблема, его перезапустят. Главное проработать возможные ошибки, если воркер вылетел на середине задачи, а затем начал ее сначала. Но это в любом случае должно быть.
Я говорю про архитектуру, когда воркеры запущены постоянно, если нет задач, они простаивают. Их кол-во фиксированно и изменяется редко.
обычно цена со скидкой высчитывается "на лету"