Dizi öğelerini oluşturmak için nasıl tarafından hierachy içeren bir anahtar belirtin?

2 Cevap php

Verilen orijinal kodlar:

foreach($option as $name=>$value)
    $array[$name] = $value;

ve $ gibi isim

button[0][text], button[0][value], button[1][text], spider[0][name], ...

Sonuç dizisi olacak

array('button[0][text]' => 'its text',
    'button[0][value]' => 'its value',
    'button[1][text]' => 'its text',
    'spider[0][name]' => 'its name',
)

Ancak, ne ben istiyorum

array('button' => array( array('text'=>'its text', 'value'=>'its value'), // this is $array[button][0]
                         array('text'=>'its text') // this is $array[button][1]
                  ),
      'spider' => array( array('name'=>'its name') // this is $array[spider][0]
                  )
)

How could i do this? ...

2 Cevap

O kadar da kötü görünmüyor, ama eval kaçınmalısınız. Kolayca preg_match'in tüm anahtarları eşleşen elde.


if(preg_match('/^\w+?[(\d+?)][(\w+?)]$/', $name, $matches)) {
    $myarray[$matches[1]][$matches[2]][$matches[3]] = $value;

Test, ama fikir alırsınız eminim değil.

Ben sadece bir çözüme kendim çalıştım, ama yine de başka çözümler görmek istiyorum. Ilginç için, benim çözüm burada yapıştırın:

if(preg_match('/^([^\[\]]+)(\[.+\])$/', $name, $matches)) {
    eval('$myarray[$matches[1]]'. $matches[2]. ' = $value;');