PHP'nin günlük operasyonlarında dizilerle en yaygın yapı ve neredeyse her gün dizi ile ilgili içerikle uğraşıyoruz. Yani soru şu: Dizileri genel olarak nasıl hareket ettirip işliyorsunuz?
1、foreach
Tanıdık, en sevdiğin değil mi?
$arr = ['a', 'b', 'c'];
foreach ($arr olarak $key => $value) {
$arr[$key] = $value . '_i';
}
print_r($arr); ['a_i', 'b_i', 'c_i'];
2、array_map
Dizinin her elemanını yönetmek için anonim fonksiyonlar kullanın. Geçiş tamamlandığında yeni bir dizi döner.
$arr = ['a', 'b', 'c'];
$arr = array_map(fonksiyon ($item) {
geri $item. '_i';
}, $arr);
print_r($arr); ['a_i', 'b_i', 'c_i'];
Aynı anda birden fazla diziyle çalışabilirsiniz
$arr_1 = ['a', 'b', 'c'];
$arr_2 = ['sen', 'iyi', 'is', 'orijinal', 'günah'];
$arr_n = [...];
$arr = array_map(fonksiyon ($item_1, $item_2) {
$item_1 geri dön. '_' . $item_2. '_i';
}, $arr_1, $arr_2);
print_r($arr); ['a_ _i', 'b_ good_i', 'Are you c__i', '_original _i', '_sin_i']
Evet, geçiş sayısı en uzun diziye göre belirlenir.
3 kez geçtikten sonra $arr_1 aslında tamamlanır, yani $item_1 değerleri bundan sonra sıfır olur
3、array_walk
Dizinizi referans geçişi olarak kullanmanın geri dönüş değeri yoktur ve sadece bir diziyi işleyebilir.
$arr = ['a', 'b', 'c'];
array_walk($arr, fonksiyon (&$item) {
$item = $item . '_i';
});
print_r($arr); ['a_i', 'b_i', 'c_i'];
Dikkat edin &$item, evet, ekstra bir & var, bu da parametrenizin veri aldığı anlamına gelir. Tek yapmanız gereken bu parametri değiştirmenin bir yolunu bulmak.
İki boyutlu dizilerle uğraşıyorsanız, işleme yöntemi de ayrılmazdır.
$arr = [
['name' => 'a'],
['name' => 'b'],
['name' => 'c']
];
array_walk($arr, fonksiyon (&$item) {
$item['isim'] = $item['isim'] . '_i';
});
print_r($arr); [['name' => 'a_i'], ['name' => 'b_i'], ['name' => 'c_i']];
4、for
Bu çok genel bir sözdizimi olmalı
$arr = ['a', 'b', 'c'];
çünkü ($i = 0; $i < sayı($arr); ++$i) {
$arr[$i] = $arr[$i] . '_i';
}
print_r($arr); ['a_i', 'b_i', 'c_i'];
Tavsiye edilmiyor. Foreach kadar verimli değildir. Ve yazma yöntemi Forgereach'ten biraz daha zahmetli.
Her biri 5、
Haha, bu işlev PHP7.2 @deprecated'de terk edilmiş ve özellikle eski moda hissettiriyor. Bu yazım yönteminin uygulama verimliliği de iyi değildir ve acemiler hemen vazgeçmelidir.
$arr = ['a', 'b', 'c'];
while (list($key, $value) = her bir($arr)) {
$arr[$key] = $value . '_i';
}
print_r($arr); ['a_i', 'b_i', 'c_i'];
6、reset
Kesin olmak gerekirse, sadece sıfırlanacak bir fonksiyon değil, aynı zamanda kod yazmak için kullanılmayan birden fazla yerleşik fonksiyonun birleşimi
$arr = ['a', 'b', 'c'];
reset() işaretçisi başa doğru, aslında varsayılan olarak başlangıca işaret etmektir, bu cümleyi görmezden gelebilirsiniz
reset($arr);
current() ile mevcut işaretçinin eleman değerini elde etmek için
while ($value = akım($arr)) {
tuş() ile mevcut işaretçinin öğe alt indeksini almak için
$arr[key($arr)] = $value . '_i';
next() işaretçisi bir sonraki
next($arr);
}
print_r($arr); ['a_i', 'b_i', 'c_i'];
|