Как решить эту устаревшую функцию каждый php
В первых двух примерах вы можете использовать key и current для назначения нужных вам значений.
$ar = $o->me; // reset isn't necessary, since you just created the array $typ = key($ar); $val = current($ar);
$out = array('me' => array(), 'mytype' => 2, '_php_class' => null); $expected = Each php чем заменить;
В этих случаях вы можете использовать next для перемещения курсора позже, но это может не потребоваться, если остальная часть вашего кода не зависит от этого.
В третьем случае я бы предложил вместо этого использовать цикл foreach и назначать $kv внутри цикла.
В четвертом случае похоже, что ключ игнорируется в list , поэтому вы можете назначить текущее значение.
$this->result = current($this->cache_data);
Как и в первых двух случаях, может потребоваться $this->cache_data курсор к next зависимости от того, как остальная часть вашего кода взаимодействует с $this->cache_data .
№ 5 можно заменить на цикл for.
Для 4. Я считаю правильным заменить list($a, $b) = each($arr) list($a, $b) = array(key($arr), current($arr)); next($arr); не так ли?
@Metal3d Metal3d да, это должно быть эквивалентно. Хотя лично я бы не использовал list, я бы просто назначил $ a и $ b напрямую с помощью key () и current (). Я знаю, что это еще одна строка кода, но это кажется более простым, чем создание массива, чтобы просто вернуть значения обратно с помощью list (). Просто мое мнение, хотя. 🙂
Вы можете создать свою собственную функцию each() используя key(), current() и next(). затем замените ваши вызовы этой функцией, например так:
$key, 'value' => current($arr)]; next($arr); return $result; >
$ar = $o->me; reset($ar); list($typ, $val) = myEach($ar);
$out = array('me' => array(), 'mytype' => 2, '_php_class' => null); $expected = myEach($out);
for(reset($broken);$kv = myEach($broken);)
Если вы хотите полностью эмулировать каждый из них, я думаю, вам понадобятся клавиши «ключ» и «значение» в выводе, а также 0 и 1.
@Don’tPanic Don’tPanic, отредактированный ответ, эта ситуация не нужна, но могут быть случаи, которые могут. спасибо за предложение
Ну, первый случай определенно не нуждался в этом. Во вторых двух случаях мы не можем точно знать, как используются массивы $expected и $kv , чтобы они могли. Не то чтобы я говорил об этом в своем ответе;)
reset($array); while (list($key, $value) = each($array))
reset($array); foreach($array as $key => $value)
Важно отметить, что они не эквивалентны, хотя в большинстве случаев будет достаточно foreach - если вы изменяете $array в цикле while, он будет перебирать измененные значения. foreach создает копию списка и перебирает его, поэтому мутации в $array не изменят цикл.
То, что вам определенно не следует делать, это поместить функцию "обратно в php", добавив ее в параметр auto_prepend_file в php.ini.
auto_prepend_file = "/var/www/php/auto_prepend.php"
Затем создайте файл и введите в функцию упаковщик function_exists.
$key, 'value' => current($arr)]; next($arr); return $result; > >
По сути, это объявляет функцию до запуска вашего php-приложения. Когда ваше приложение пытается запустить каждую функцию, оно будет использовать вашу версию.
Это абсолютно не тот способ, которым вы должны подходить к этой проблеме, особенно на производстве! Тем не менее, вы разработчик с ограничениями по времени, и вы просто хотите попробовать произвольные фреймворки для вашего следующего проекта, и они не были обновлены для работы на вашем локальном сервере разработки, не свернув вашу версию php.
Когда вы посвятите себя созданию базы кода для своего проекта, пожалуйста, внесите изменения в принятый ответ, потому что они работают.
Я использовал эмуляцию Wee Zel каждой функции
Alternative to the Deprecated PHP “each” Function
R ecently I have encountered an issue with my old codes. Those were running just fine earlier. Issue occurs while my server updated its PHP version to 7.2.
Actually, this is common, with up-gradation to server configurations some old functions get deprecated, and in my case, it was PHP “each” function.
With PHP version 7.2 “each” function got deprecated and hence my old codes throwing warnings.
I have to modify my codes and replace the use of “each” with relevant alternatives. Luckily my old codes have a modular structure and most of my logic is bound into some functions, hence I have to change only a few lines of code to remove the warnings.
Here I am giving some examples of the use of “each” function and alternative way to replicate them with PHP 7.2 compatible codes.
EACH usage:
(is_array($data)) ? list($data, $params) = each($data) : $params = NULL;
Alternative:
(is_array($data)) ? list($data, $params) = $this->altEach($data) : $params = NULL;
$ret = ($key === null)? false: [$key, current($data), ‘key’ => $key, ‘value’ => current($data)];
EACH usage:
for(reset($data); $keyvalue = each($data);)
Alternative:
EACH usage:
$data = array(‘arrayInp’ => array(), ‘intInp’ => 2, ‘otherInp’ => null);
Alternative:
$data = array(‘arrayInp’ => array(), ‘intInp’ => 2, ‘otherInp’ => null);
$output = Each php чем заменить;
EACH usage:
while( (list($key, $value) = each($data)) || $i < 30 )
Each() устарела, а чем заменить не сказали
сма DAEWOO DWD M1029A чем заменить транс, трансформатор в обрыве, чем заменить
день добрый. модуль PN:361430A950 первичная транса в обрыве . может кто подскажет параметры .
Чем можно заменить заменить toggle() ?
Добрый день, у меня такой вопрос. Чем можно заменить toggle(function(), function()); В ранних.
Устарела ли JavaEE
Подскажите пожалуйста, устарела или устаревает Java ee, а то я начал недавно ее изучать, а если да.
Книга устарела?
У меня есть книга за 1996 год. Намир Шамма "Основы С++ и объектно-ориентированного.
Сообщение от Jewbacabra
не подходит.
Первый и второй элемент массива обрабатываются одним алгоритмом, остальные, до конца - другим алгоритмом.
Переписывать целые куски программы однако.. С foreach-ем говнокодище какое-то получится. Счетчик вводить и гонять его чтобы в каждой итерации на 100000 элементов проверять не является ли элемент первым или вторым. А главное непонятно кому эта функция помешала..
Сообщение было отмечено otto-fukin как решение
Решение
Сообщение от otto-fukin
Первый и второй элемент массива обрабатываются одним алгоритмом, остальные, до конца - другим алгоритмом.
Массив все же однородная стуктура. Если есть необходимость разные элементы обрабатывать по-разному, то вероятно следует пересмотреть алгоритм
Сообщение от otto-fukin
Счетчик вводить и гонять его чтобы в каждой итерации на 100000 элементов проверять не является ли элемент первым или вторым.
Cтоит заметить, что each - самый медленный способ обхода массива. if внутри foreach будет на порядок быстрее (см. бенчмарк под спойлером)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
/** * @BeforeMethods() * @Iterations(5) */ class IterBench { private $array; private $filename; public function init() { $this->array = range(1, 1000000); } public function benchForeach() { foreach ($this->array as $key => $value); } public function benchEach() { while (list($key, $value) = each($this->array)); } public function benchFor() { $count = count($this->array); for ($i = 0; $i $count; ++$i); } }
/srv # ./vendor/bin/phpbench run IterBench.php --report=aggregate PhpBench 0.14.0 (@git_version@). Running benchmarks. Using configuration file: /srv/phpbench.json \IterBench benchForeach I4 P0 [μ Mo]/r: 30,202.800 29,886.746 (μs) [μSD μRSD]/r: 423.400μs 1.40% benchEach I4 P0 [μ Mo]/r: 587,427.800 584,176.059 (μs) [μSD μRSD]/r: 6,420.265μs 1.09% benchFor I4 P0 [μ Mo]/r: 42,743.000 42,742.724 (μs) [μSD μRSD]/r: 30.607μs 0.07% 3 subjects, 15 iterations, 3 revs, 0 rejects, 0 failures, 0 warnings (best [mean mode] worst) = 29,821.000 [220,124.533 218,935.176] 30,729.000 (μs) ⅀T: 3,301,868.000μs μSD/r 2,291.424μs μRSD/r: 0.855% suite: 133ecf2b3038570f7c4970734ecef34bc077c712, date: 2018-02-10, stime: 22:25:55 +-----------+--------------+--------+--------+------+-----+-------------+---------------+---------------+---------------+---------------+-------------+--------+--------+ | benchmark | subject | groups | params | revs | its | mem_peak | best | mean | mode | worst | stdev | rstdev | diff | +-----------+--------------+--------+--------+------+-----+-------------+---------------+---------------+---------------+---------------+-------------+--------+--------+ | IterBench | benchForeach | | [] | 1 | 5 | 34,638,288b | 29,821.000μs | 30,202.800μs | 29,886.746μs | 30,729.000μs | 423.400μs | 1.40% | 1.00x | | IterBench | benchEach | | [] | 1 | 5 | 34,638,656b | 581,722.000μs | 587,427.800μs | 584,176.059μs | 599,139.000μs | 6,420.265μs | 1.09% | 19.45x | | IterBench | benchFor | | [] | 1 | 5 | 34,638,288b | 42,696.000μs | 42,743.000μs | 42,742.724μs | 42,790.000μs | 30.607μs | 0.07% | 1.42x | +-----------+--------------+--------+--------+------+-----+-------------+---------------+---------------+---------------+---------------+-------------+--------+--------+
Как поменять функцию each, удаленную в PHP 8?
AlbinaA , откуда ты взял этот код
видно что это javascript а $ в нем используется как сокращенное название стартового объекта JQuery
each в jquery никуда не исчезал, но могу предположить что пор какой то причине вместо правильной версии библиотеки jquery подключена какая то модифицированная, в которой есть $ но она несет другую функцию
Спасибо большое всем, кто ответил. Понимаю, что раздражаю своей некомпетентностью, но думала, что мне здесь помогут. В техподдержке битрикса сказали, что проблема в том, что используется устаревшая функция each, не поддерживаемая php выше 8. И используется она в этом файле. Это еднственное each в чистом виде, что я увидела в этом файле)
Ссылка удалена модератором.
Поэтому так и сформулировала вопрос. Если направите, буду очень благодарна.
Код изначально был прописан так для сайта.
AlbinaA, такая функция есть (была) в php https://www.php.net/manual/ru/function.each.php
Но вы показали кусок javascript кода.
Использовалась для обхода массивов.
Вместо этой функции можно использовать array_map или простой цикл foreach.
Но просто заменить не получится, нужно будет немного переписать код.
В этом файле данная функция не используется. Кто-то напутал – техподдержка или вы.
Ошибка PHP, но код JS. Это не та функция each что вам нужна, в описании ошибки от пыхи должен быть указан файл и строка где она произошла. И как исправить это зависит от кода, может там нужен перебор массива, может только первый элемент.
Спасибо! При попытке отправить завку - три замечания.
2 в файле /include/libmail.php:
while (list( $hdr, $value ) = each($new_mass_head))
и в файле request/index.php
$m->Send();
$new_mass_head = [ 'key1' => 'val1', 'key2' => 'val2' ]; // Вместо этого . while (list( $hdr, $value ) = each($new_mass_head)) < echo '';var_dump($hdr, $value);echo ''; > // . используем это foreach ($new_mass_head as $hdr => $value) < echo '';var_dump($hdr, $value);echo ''; >
toxa82, в моем коде нет второй части
// Вместо этого .
while (list( $hdr, $value ) = each($new_mass_head)) echo '';var_dump($hdr, $value);echo '';
>
У меня так
while (list( $hdr, $value ) = each($new_mass_head))
if ($hdr == "From" and strlen($this->names_email['from']))
$this->ready_headers[$resource] .= $hdr.": =?".$this->charset."?Q?".str_replace("+", "_", str_replace("%", "=", urlencode(strtr($this->names_email['from'], "\r\n", " "))))."?= \r\n";
elseif ($hdr == "Reply-To" and strlen($this->names_email['Reply-To']))
$this->ready_headers[$resource] .= $hdr.": =?".$this->charset."?Q?".str_replace("+", "_", str_replace("%", "=", urlencode(strtr($this->names_email['Reply-To'], "\r\n", " "))))."?= \r\n";
elseif ($hdr != "BCC")
$this->ready_headers[$resource] .= $hdr.": ".$value."\r\n"; // пропускаем заголовок для отправки скрытой копии
>
Возможно, это кусок кода для примера, чтоб посмотреть проблемную строку, и имеется ввиду, что мне надо поменять
while (list( $hdr, $value ) = each($new_mass_head))
на
foreach ($new_mass_head as $hdr => $value)
?