Ben örneğin içine bir iki foreach
deyimi birleştirmek gerekiyor
foreach ($categories_stack as $category)
foreach ($page_name as $value)
Ben aynı foreach
deyimi içine bu eklemek gerekir
Bu yüzden ne olursa mümkün mü?
teşekkürler
(I am not sure I have understood your question completely. I am assuming that you want to iterate through the two lists in parallel)
Aşağıdaki gibi for
döngü kullanarak yapabilirsiniz:
$n = min(count($category), count($value));
for($c = 0; $c < $n; $c = $c + 1){
$categories_stack = $category[$c];
$pagename = $value[$c];
...
}
Ile aynı ulaşmak için foreach
Eğer Python zip()
işlevine benzer bir işlev gerekir.
Python, olurdu:
for categories_stack, pagename in zip(categories, values):
print categories_stack, pagename
PHP bir standart zip()
işlevi yok çünkü, kendi üzerinde böyle bir işlevi yazmak veya for
döngü çözümü ile gitmek gerekir.
Eğer istediğin buysa sen iç içe foreachs yapabilirsiniz. Ama verilerin daha bilmeden, bu yardımcı olmadığını söylemek imkansız:
foreach ($categories_stack as $category) {
foreach ($page_name as $value) {
}
}
Muhtemelen bir kategorideki tüm sayfaları yazdırmak istiyor? Muhtemelen işe yaramaz, bu yüzden biraz diziler gibi bakmak ve birbirleriyle nasıl ilişki hakkında daha fazla bilgi verebilir misiniz?
Bu döngü uzun dizinin uzunluğuna devam ediyor ve diziler ya eşleşen hiçbir unsur vardır nerede boş dönecektir. Bunu bir deneyin!
$a = array(1 => "a",25 => "b", 10 => "c",99=>"d");
$b = array(15=>1,5=>2,6=>3);
$ao = new ArrayObject($a);
$bo = new ArrayObject($b);
$ai = $ao->getIterator();
$bi = $bo->getIterator();
for (
$ai->rewind(),$bi->rewind(),$av = $ai->current(),$bv = $bi->current();
list($av,$bv) =
array(
($ai->valid() ? $ai->current() : null),
($bi->valid() ? $bi->current() : null)
),
($ai->valid() || $bi->valid());
($ai->valid() ? $ai->next() : null),($bi->valid() ? $bi->next() : null))
{
echo "\$av = $av\n";
echo "\$bv = $bv\n";
}
Ben gerçekten iki dizileri çekmesini istediğiniz tam olarak nasıl sorusuna söyleyemem. İç içe bir foreach
sadece yazmak için
foreach ($myArray as $k => $v) {
foreach ($mySecondArray as $kb => $vb {
}
}
Ancak geri çağırma işlevleri bazı yaratıcı kullanımı ile şeyler her türlü yapabilirsiniz. Bu durumda, bir anonim işlev her tekrarında her diziden iki öğe dönen. Bu bir dizi olarak yineleme değerini kullanmak veya altında yapılır gibi list()
kullanarak değişkenlere bölmek sonra kolaydır.
Bu da ne olursa olsun anahtar yapısı çalışma yararı vardır. Ben sadece dizi elemanlarının sipariş üzerine dayanıyor. Elemanları düzenin dışında ise sadece uygun sıralama işlevini kullanın.
Bu hata rapor var gibi dizilerin uzunluğu hakkında endişe, bu yüzden boş değerler için bir göz tutmak emin yapmaz.
$a = array("a","b","c");
$b = array(1,2,3);
foreach (
array_map(
create_function(
'$a,$b', 'return array($a,$b);'
)
,$a,$b
)
as $value
)
{
list($a,$b) = $value;
echo "\$a = $a\n";
echo "\$b = $b\n";
}
Çıktı
$a = a
$b = 1
$a = b
$b = 2
$a = c
$b = 3
İşte biten listelerden birini durur sizin için başka biri. Kullanarak aynı min(count(a),count(b)
. Faydalı Eğer aynı uzunlukta diziler varsa. Birisi devam yapabilirsiniz ise max(count(a),count(b))
bana bildirin.
$ao = new ArrayObject($a);
$bo = new ArrayObject($b);
$ai = $ao->getIterator();
$bi = $bo->getIterator();
for (
$ai->rewind(),$bi->rewind();
$av = $ai->current(),$bv=$bi->current();
$ai->next(),$bi->next())
{
echo "\$av = $av\n";
echo "\$bv = $bv\n";
}
Dizi elemanları birbiri ile doğrudan yazışma var mı, yani her bir eleman için $page_name
bir unsur var $categories_stack
? Eğer öyleyse, sadece tuşları and değerleri (onlar aynı tuşları varsayarak) üzerinde yineleme:
foreach ($categories_stack as $key => $value)
{
$category = $value;
$page = $page_name[$key];
// ...
}