Maison > Questions et réponses > le corps du texte
P粉4634184832023-08-23 09:19:01
each()
Il existe en fait de nombreux cas où each()
peut être remplacé, c'est pourquoi il y a tant de réponses différentes votées positivement à cette question.
-while (list($key, $callback) = each($callbacks)) { +foreach ($callbacks as $key => $callback) { // ... }
Aussi :
-while (list($key) = each($callbacks)) { +foreach (array_keys($callbacks) as $key) { // ... }
Vous pouvez remplacer manuellement un par un. Mais n'y a-t-il pas une meilleure solution ?
J'aide dans des projets de migration et j'ai plus de 150 cas comme celui-ci. Je suis paresseux, alors j'ai créé un outil appelé Rector qui convertit le code de la manière ci-dessus (il y a plus de cas, mais je ne veux pas spammer la réponse).
Il fait partie de la collection PHP_72
.
composer require rector/rector --dev
rector.php
fichier de configurationvendor/bin/rector init
PHP_72
Collection<?php use Rector\Core\Configuration\Option; use Rector\Set\ValueObject\SetList; use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator; return static function (ContainerConfigurator $containerConfigurator): void { $parameters->set(Option::SETS, [ Setlist::PHP_72, ]); };
vendor/bin/rector process src --set php72
J'espère que cela vous aidera dans votre migration.
S'il y a des erreurs ou des exceptions, c'est ce que le Recteur a manqué. Créez un problème afin que nous puissions le résoudre et le faire fonctionner dans tous les cas possibles.
P粉9828815832023-08-23 00:06:26
Pour vos deux premiers exemples de cas, vous pouvez utiliser key()
和 current()
pour attribuer les valeurs dont vous avez besoin.
$ar = $o->me; // 重置不是必需的,因为你刚刚创建了数组 $typ = key($ar); $val = current($ar);
$out = array('me' => array(), 'mytype' => 2, '_php_class' => null); $expected = [key($out), current($out)];
Dans ces cas, vous pouvez utiliser next()
pour avancer le curseur par la suite, mais cela peut ne pas être nécessaire si le reste de votre code n'en dépend pas.
Pour le troisième cas, je vous suggère d'utiliser simplement un foreach()
循环,并在循环内部分配 $kv
.
foreach ($broken as $k => $v) { $kv = [$k, $v]; }
Pour le quatrième cas, la clé semble être ignorée dans list()
afin que vous puissiez attribuer la valeur actuelle.
$this->result = current($this->cache_data);
Comme dans les deux premiers cas, selon la façon dont le reste de votre code interagit avec $this->cache_data
, vous devrez peut-être utiliser $this->cache_data
交互,可能需要使用 next()
pour faire avancer le curseur.
Le cinquième cas peut être remplacé par for()
boucle.
reset($array); for ($i = 0; $i < 30; $i++) { $id = key($array); $item = current($array); // 代码 next($array); }