Bir boyutlu (recursive) dizinin bütün değerleri çekmek için çalışıyor

5 Cevap php

Varolan boyutlu dizinin tüm değerleri içeren tek bir dizi oluşturmak için çalışıyorum. Bu ben bugüne kadar ne var ...

    function MaxArray($arr) {

    foreach ($arr as $value) {

        if (is_array($value)) {
            MaxArray($value);
        } else {
            $array[] = $value;
        }
    }
print_r($array);

}

$arr = array(array(141,151,161), 2, 3, array(101, 202, array(303,404, array(1,2))));

MaxArray($arr);

Ben bu kodu çalıştırdığınızda, ben print_r işlevi bu tepkiyi almak ...

Array ( [0] => 141 [1] => 151 [2] => 161 ) Array ( [0] => 1 [1] => 2 ) Array ( [0] => 303 [1] => 404 ) Array ( [0] => 101 [1] => 202 ) Array ( [0] => 2 [1] => 3 ) 

Gördüğünüz gibi, bu benim aradığım şey değil ve ben tek bir diziye boyutlu dizideki tüm değerleri birleştirmek için nasıl anlamaya olamaz. Herkes burada bana doğru yönde işaret edebilir? Teşekkürler!

5 Cevap

$ Dizi MaxArray her yürütme () içinde yeniden ve yazdırılır. Tüm özyinelemeli infazlar üzerine kurmak gerekir. Bunu yapmak için en iyi yolu MaxArray () fonksiyonu o dizi dönmek yerine onu yazdırmak zorunda olduğunu düşünüyorum. Bunu yazarken ... ve, Dominic Rodger sadece sizin için bunu yaptı!

işlevi asla değişmeyecek sonuç dizide, bir başvuru almalıdır.

fonksiyon {... ($ x, $ result) düzleştirmek ($ fark, & $ result) dümdüz; ...}

İşte bir örnek: http://davidwalsh.name/flatten-nested-arrays-php

İşte foreach kullanımını ve dize anahtarlarını (bazı) koruyarak gösteren diğer bir varyantı bulunuyor.

function array_flatten($array) {
    $rslt = array();
    foreach ($array as $key => $val) {
        if (is_array($val)) {
            $rslt = array_merge($rslt, array_flatten($val));
        } elseif (is_int($key)) {
            $rslt[] = $val;
        } else {
            // for string keys, earlier values are overwritten with later ones
            $rslt[$key] = $val;
        }
    }
    return $rslt;
}

Farklı çarpışma davranış için, $rslt[$key] = $val; satırını değiştirin.

Eğer sadece çıkış için bir özyinelemeli dizinin max değeri istiyorsanız, bunu kullanın

function MaxArray($arr) {
  $max = 0;
  foreach($arr as $a)
  {
   if(is_array($a)) {
     $max = MaxArray($a);
   } else if($a > $max){
     $max = $a;
   }
 }
 return $max;
}