PHP dizi düzleştirmek

3 Cevap php

Ben bu alanlar ile bir form var ve bunları yeniden adlandırmak edemez ki:

<input type="text" name="foo[bar]" />
<input type="text" name="foo[baz]" />
<input type="text" name="foo[bat][faz]" />

Teslim olduğunda, PHP bir diziye bu dönüşür:

Array
(
    [foo] => Array
        (
            [bar] => foo bar
            [baz] => foo baz
            [bat] => Array
                (
                    [faz] => foo bat faz
                )

        )

)

Orada gibi bir veri yapısı içine bu dizi dönüştürmek veya düzleştirmek için ne yöntemler şunlardır:

Array
(
    [foo[bar]] => foo bar
    [foo[baz]] => foo baz
    [foo[bat][faz]] => foo bat faz
)

3 Cevap

Ben bu istediğini olduğunu düşünüyorum

$ritit = new RecursiveIteratorIterator(new RecursiveArrayIterator($arr));
$result = array();
foreach ($ritit as $leafValue) {
    $path = 'foo99';
    foreach (range(0, $ritit->getDepth()) as $depth) {
        $path .= sprintf('[%s]', $ritit->getSubIterator($depth)->key());
    }
    $result[$path] = $leafValue;
}

Varsayılan olarak, RecursiveIteratorIterator sadece yaprak düğümleri ziyaret, böylece dış foreach döngü her yineleme yineleyici yapısı hakkında bakım değerlerden biri durdu. Biz RecursiveIteratorIterator (bir yineleyici her seviye için kullanılır) oluşturmak ve bizim için yönetmek olduğunu Yineleyicilerin bir göz alarak nerede bizim yol inşa anahtarları bulmak.

Aptal bir cevap olabilir ama neden bunu yapmak için değil

<input type="text" name="foobar" />
<input type="text" name="foobaz" />
<input type="text" name="foobatfaz" />

?

Değil sorunuzun cevabı ancak alternatif var extract bir dizi çekmek ve onlardan değişkenleri üretecek. örneğin;

$array = array
    (
        [foo] => foo bar
        [boo] => something else
    )
extract($array);

Çıktı

$foo = 'foo bar';
$boo = 'something else';

Örneğin aynı dizin adlarını işlemek için nasıl bir kaç seçenek vardır, üzerinde varolan değeri yazmak veya değişken adına bir önek ekler.