Bir ilişkisel diziler değerlerin dizisini almak nasıl?

3 Cevap

Nasıl bir ilişkisel dizi değerlerin bir dizi alabilirsiniz?

Associate dizi Örnek:

Array
(
    [0] => Array
        (
            [0] => 1
            [1] => 2
            [2] => 3
        )
    [1] => Array
        (
            [0] => 4
            [1] => 5
            [2] => 6
        )
    [2] => Array
        (
            [0] => 7
        )
)

İstenilen Çıktı

Array
(1,2,3,4,5,6,7)

3 Cevap

PHP bulunuyor gibi, size uygun olacak emin değil> = 5.3, sadece, ama burada bir olası çözüm, using array_walk_recursive and a closure (see Anonymous functions) :

$array = array(
    array(1, 2, 3), 
    array(4, 5, 6), 
    array(7), 
);

$result = array();
array_walk_recursive($array, function ($value, $key) use (& $result) {
    $result[] = $value;
});
var_dump($result);

Ve sonuç:

array
  0 => int 1
  1 => int 2
  2 => int 3
  3 => int 4
  4 => int 5
  5 => int 6
  6 => int 7

Temelde, kapatma ben bu işe lazım tek yolu şudur: anonim işlevi, referans olarak, $result değişkeni almak için kullanılır.



Ve, sadece bu PHP 5.2 için çalışma var sadece (i.e. not using a closure) bu ile, onu göndermek için:

$result = array();
array_walk_recursive($array, 'my_func', & $result);
var_dump($result);

function my_func($value, $key, & $result) {
    $result[] = $value;
}

Hangi çok çalışıyor - ama bir uyarı yükseltir:

Deprecated: Call-time pass-by-reference has been deprecated

Unfortunatly, I didn't find a way of getting this to work without passing $result by reference at call-time :-(
(Maybe someone else has an idea, about how to do that ?)

Her ayrı üyesinde bir array_merge () yapmak.

$test = Array
(
    "0" => Array
        (
            0 => 1,
            1 => 2,
            2 => 3,
        ),
    "1" => Array
        (
            0 => 4,
            1 => 5,
            2 => 6,
        ),
    "2" => Array
        (
            0 => 7,
        )
);

print_r(array_merge($test[0],$test[1],$test[2]));
// Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 [5] => 6 [6] => 7 ) 

array_reduce tarafından kullanılan dizi elemanları olarak yorumlanır mixed yerine integer olarak sabittir, çünkü php 5.3 altında bu, gerçekten güzel ve kullanışlı olmalı

bu yüzden

print_r(array_reduce($test, 'array_merge'))

Ben henüz denemedim - 5.3 hiçbir kopyasını - en azından theory bu kadar yapmam gerekir. <5,3 altında hataları alırsınız.

Note that this only merges the top level of array, unlike the bu yüzdenlution using array_walk_recursive.