Diziler PHP diziler aracılığıyla yineleme

5 Cevap php

Nasıl bu dizi itarate olabilir

array(2) {
  [0]=>
  array(1) {
    [0]=>
    array(14) {
      [0]=>
      string(17) "ratosk8@censored"
      [1]=>
      string(23) "alokkumar.censored"
      [2]=>
      string(24) "uuleticialima1@censored"
      [3]=>
      string(23) "camera.clicks@censored"
      [4]=>
      string(24) "billthailand@censored"
      [5]=>
      string(17) "v.golev@censored"
      [6]=>
      string(22) "flipe.lost@censored"
      [7]=>
      string(25) "notherdirtybird@censored"
      [8]=>
      string(21) "booktiphani@censored"
      [9]=>
      string(32) "opinion?jazzantoledo@censored"
      [10]=>
      string(25) "skateforemerica@censored"
      [11]=>
      string(28) "blockdymezmagazine@censored"
      [12]=>
      string(17) "and6451@censored"
      [13]=>
      string(22) "flipe.lost@censored"
    }
  }
  [1]=>
  array(1) {
    [0]=>
    array(14) {
      [0]=>
      string(17) "ratosk8@censored"
      [1]=>
      string(23) "alokkumar.jsr@censored"
      [2]=>
      string(24) "uuleticialima1@censored.com"
      [3]=>
      string(23) "camera.clicks@censored.com"
      [4]=>
      string(24) "billthailand@censored.com"
      [5]=>
      string(17) "v.golev@censored.com"
      [6]=>
      string(22) "flipe.lost@censored.com"
      [7]=>
      string(25) "notherdirtybird@censored.com"
      [8]=>
      string(21) "booktiphani@censored.com"
      [9]=>
      string(32) "opinion?jazzantoledo@censored.com"
      [10]=>
      string(25) "skateforemerica@censored.com"
      [11]=>
      string(28) "blockdymezmagazine@censored.com"
      [12]=>
      string(17) "and6451@censored.com"
      [13]=>
      string(22) "flipe.lost@censored.com"
    }
  }
}

5 Cevap

Içerisinde başka bir foreach kullanabilirsiniz foreach:

foreach ($array as $item) {
    foreach ($item[0] as $email) {
        // …
    }
}

I-$item[0] yerine sadece $item kullanılan unutmayın.

Ayrıca o çok boyutlu dizi düzleştirmek için bir işlevi kullanmak ve daha sonra bunu ireate olabilecek bir tek foreach:

function array_flatten($array) {
    if (!is_array($array)) {
        return false;
    }
    $result = array();
    $stack = $array;
    $len = count($stack);
    while ($len) {
        $val = array_shift($stack);
        --$len;
        if (is_array($val)) {
            foreach ($val as $key => $val) {
                if (is_array($val)) {
                    array_unshift($stack, $val);
                    ++$len;
                } else {
                    $result[] = $val;
                }
            }
        } else {
            $result[] = $val;
        }
    }
    return $result;
}

Belki biraz daha esnek bir çözüm Özyineleme olduğunu:

<?php

$a = array();
$a[] = array( array( "a", "b") );
$a[] = array( array( array("c", "d"), array("e", "f"), array("g", "h")));


print_arr($a);

function print_arr($obj) {
    foreach($obj as $k => $v) {
    	if(is_array($v)) {
    		print_arr($v);
    	}else{
    		echo $v ."<br />";
    	}
    }
}

Yararsız bir gerçektir: Bir stop durum ama go durum yok benim ilk özyinelemeli fonksiyon.

Peki, burada ne var her eleman üzerinden yineleme istediğiniz dizileri içeren bir tek öğeli bir dizi içeren bir iki eleman dizidir.

// This gets us the two seperate arrays
foreach ($root_array as $2nd_level_array) {

  // But now, we still have one more one-element array in each...
  // we could iterate, but since there's only one element, 
  // we can just grab that element using array_pop()
  $email_address_array = array_pop($2nd_level_array)

  // now we can iterate over each of the two lists
  foreach ($email_address_array as $email_address) {

    // process email address

  }

}

Soru dizi yineleme konusunda çok spesifik değildir ve çok boyutlu bir dizi beri bunu yapmak için çeşitli yollar vardır.

Ben bana en mantıklı olur i görmek iki şekilde belirtiyoruz.

Öncelikle ben öğeler sıralı liste dizi üzerinden seyahat.

Benim ikinci denemede i anahtarına göre ikinci düzey öğeleri gruplandırma dizi üzerinden seyahat.

$a = array(
    0 => array(
    0 => array(
        0 => "test0-0-0",
        1 => "test0-0-1"
    )
    ),
    1 => array(
    0 => array(
        0 => "test1-0-0",
        1 => "test1-0-1"
    )
    )
);

echo "Method 1\n";
foreach ($a as $array) {
    foreach ($array[0] as $item) {
    echo "$item\n";
    }
}
echo "Method 2\n";
$a0 = $a[0][0];
$a1 = $a[1][0];
if (count($a0) == count($a1)) {
    for ($i=0;$i<count($a0);++$i) {
    echo $a0[$i]."\n";
    echo $a1[$i]."\n";
    }
}