Rumah > Soal Jawab > teks badan
P粉4634184832023-08-23 09:19:01
each()
Sebenarnya terdapat banyak kes di mana each()
boleh digantikan, itulah sebabnya terdapat begitu banyak jawapan undian tinggi yang berbeza dalam soalan ini.
-while (list($key, $callback) = each($callbacks)) { +foreach ($callbacks as $key => $callback) { // ... }
Juga:
-while (list($key) = each($callbacks)) { +foreach (array_keys($callbacks) as $key) { // ... }
Anda boleh menggantikan secara manual satu per satu. Tetapi tidakkah ada cara yang lebih baik?
Saya membantu dengan projek migrasi dan mempunyai lebih daripada 150 kes seperti ini. Saya malas, jadi saya membuat alat yang dipanggil Rektor yang menukar kod ke cara di atas (ada lagi kes, tetapi saya tidak mahu spam jawapannya).
Ia adalah sebahagian daripada koleksi PHP_72
.
composer require rector/rector --dev
rector.php
fail konfigurasivendor/bin/rector init
PHP_72
Koleksi<?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
Semoga ia membantu dengan penghijrahan anda.
Jika terdapat sebarang kesilapan atau pengecualian, itu yang Rektor terlepas. Buat isu supaya kami boleh membetulkannya dan menjadikannya berfungsi untuk semua kes yang mungkin.
P粉9828815832023-08-23 00:06:26
Untuk dua contoh kes pertama anda, anda boleh menggunakan key()
和 current()
untuk menetapkan nilai yang anda perlukan.
$ar = $o->me; // 重置不是必需的,因为你刚刚创建了数组 $typ = key($ar); $val = current($ar);
$out = array('me' => array(), 'mytype' => 2, '_php_class' => null); $expected = [key($out), current($out)];
Dalam kes ini, anda boleh menggunakan next()
untuk memajukan kursor selepas itu, tetapi ini mungkin tidak diperlukan jika selebihnya kod anda tidak bergantung padanya.
Untuk kes ketiga, saya cadangkan anda hanya menggunakan foreach()
循环,并在循环内部分配 $kv
.
foreach ($broken as $k => $v) { $kv = [$k, $v]; }
Untuk kes keempat, kunci nampaknya diabaikan dalam list()
supaya anda boleh menetapkan nilai semasa.
$this->result = current($this->cache_data);
Seperti dua kes pertama, bergantung pada cara selebihnya kod anda berinteraksi dengan $this->cache_data
, anda mungkin perlu menggunakan $this->cache_data
交互,可能需要使用 next()
untuk memajukan kursor.
Kes kelima boleh digantikan dengan for()
gelung.
reset($array); for ($i = 0; $i < 30; $i++) { $id = key($array); $item = current($array); // 代码 next($array); }