PHP: dizi düzleştirmek - hızlı yolu nedir?

2 Cevap php

Bir dizi düzleştirmek ve bir foreach döngü çalışan olmadan anahtarlarını (bu durumda 'anahtar' ve 'değer') seçmek için herhangi bir hızlı yolu var mı, yoksa foreach her zaman en hızlı yolu nedir?

Array
(
    [0] => Array
        (
            [key] => string
            [value] => a simple string
            [cas] => 0
        )

    [1] => Array
        (
            [key] => int
            [value] => 99
            [cas] => 0
        )

    [2] => Array
        (
            [key] => array
            [value] => Array
                (
                    [0] => 11
                    [1] => 12
                )

            [cas] => 0
        )

)

Için:

Array
(
    [int] => 99
    [string] => a simple string
    [array] => Array
        (
            [0] => 11
            [1] => 12
        )
)

2 Cevap

Bu bir çekim verin:

$ret = array();
while ($el = each($array)) {
    $ret[$el['value']['key']] = $el['value']['value'];
}

Bu doğru tamsayı tuşları ile dizileri birleştirmek gerekir. Tuşları bitişik olan ve sıfırdan başlamak, onlar atılır. Bir tamsayı anahtarı henüz düz dizide yoksa olduğu gibi, bu tutulacaktır; Bu çoğunlukla bitişik olmayan diziler korumak gerekir.

function array_flatten(/* ... */)
{
    $flat = array();
    array_walk_recursive(func_get_args(), function($value, $key)
    {
        if (array_key_exists($key, $flat))
        {
            if (is_int($key))
            {
                $flat[] = $value;
            }
        }
        else
        {
            $flat[$key] = $value;
        }
    });
    return $flat;
}

Sen faydalı değerler lehine yerine !isset($key) veya empty($key) kullanabilirsiniz.

Burada daha kısa bir versiyonu:

function array_flatten(/* ... */)
{
    $flat = array();
    array_walk_recursive(func_get_args(), function($value, $key) use (&$flat)
    {
        $flat = array_merge($flat, array($key => $value));
    });
    return $flat;
}