2014-03-27 6 views
-1

Мне нужно, чтобы преобразовать массив как это:Преобразовать массив в параметрах

$arrList = Array 
    (
    [0] => First Top element 
    [1] => Second Top element 
    [2] => Third Top element 
    [Fourth Top element] => Array 
     (
     [0] => Fourth Top element - A 
     [1] => Fourth Top element - B 
    ) 

    [3] => First Bottom element 
    [4] => Second Bottom element 
    [5] => Third Bottom element 
    [Fourth Bottom element] => Array 
     (
     [0] => Fourth Bottom element - A 
     [1] => Fourth Bottom element - B 
    ) 
) 

В настройках для моего списка, как это:

<option class="red">First Top element</option> 
<option class="red">Second Top element</option> 
<option class="red">Third Top element</option> 
<optgroup label="Fourth Top element" class="red"> 
    <option>Fourth Top element - A</option> 
    <option>Fourth Top element - B</option> 
</optgroup> 
<option class="green">First Bottom element</option> 
<option class="green">Second Bottom element</option> 
<option class="green">Third Bottom element</option> 
<optgroup label="Fourth Bottom element" class="green"> 
    <option>Fourth Bottom element - A</option> 
    <option>Fourth Bottom element - B</option> 
</optgroup> 

Так что я написал этот код:

foreach ($arrList as $element => $subelement) { 
    $strClass = ''; 
    if(stristr('top',$subelement) || stristr('top',$element)) { 
    $strClass = 'class="red"'; 
    } else if(stristr('bottom',$subelement) || stristr('bottom',$element)) { 
    $strClass = 'class="green"'; 
    } 

    if(!is_array($subelement)) { 
    echo '<option '.$strClass.'>' . $subelement . '</option>'."\n"; 
    } else { 
    echo '<optgroup label="'.$element.'" '.$strClass.'>'."\n"; 
    foreach ($subelement as $elementLetter) { 
     echo '<option>' . $elementLetter . '</option>'."\n"; 
    } 
    echo '</optgroup>'."\n"; 
    } 
} 

Но он пишет:

<option >First Top element</option> 
<option >Second Top element</option> 
<option >Third Top element</option> 
<optgroup label="Fourth Top element" class="red"> 
    <option>Fourth Top element - A</option> 
    <option>Fourth Top element - B</option> 
</optgroup> 
<option >First Bottom element</option> 
<option >Second Bottom element</option> 
<option >Third Bottom element</option> 
<optgroup label="Fourth Bottom element" class="green"> 
    <option>Fourth Bottom element - A</option> 
    <option>Fourth Bottom element - B</option> 
</optgroup> 

Может кто-нибудь мне помочь?

+0

Значит, ваш код работает, за исключением правильных классов? – kero

+0

'$ strClass'' '' ', и ваш оператор if не запускается правильно. Вы можете использовать 'stristr ('top', $ subelement, true)', чтобы получить whats BEFORE top, потому что после этого нет ничего, и даже тогда я не уверен, что он будет работать, потому что есть пробел. – 13ruce1337

ответ

1

Итак, вы в основном ищете что-то подобное. Причина, по которой я не использую stristr, заключается в том, что она возвращает часть строки после той части, которую вы искали. В этом случае вы не хотите этого. Итак, зачем заставить синтаксический анализатор сделать копию строки, разрезать ее по частям, вернуть ее вам ... для вас просто ... выбросить ее, даже не глядя на нее. Вместо этого проще использовать strpos, который возвращает позицию, в которой он нашел строку. Если он не нашел его, он возвращает false. Так что быстрая проверка «не является ложью», достаточно.

В случае, если вам действительно нужна проверка чувствительности к корпусу, вы можете использовать stripos.

$list = array(); 
foreach($arrList as $key=>$el) { 
    $class = ''; 
    if(strpos($el, 'top') !== false) { 
     // top class 
     $class = 'red'; 
    } else { 
     // if not a top class, then it's bottom apparently 
     $class = 'green'; 
    } 
    if(is_array($el)) { 
     if(strpos($key, 'top') !== false) { 
     $class = 'red'; 
     } else { 
     $class = 'green'; 
     } 
     $list[] = '<optgroup label="'.$key.'" class="'.$class.'">'; 
     foreach($el as $subel) { 
     $list[] = '<option>'.$subel.'</option>'; 
     } 
     $list[] = '</optgroup>'; 
    } else { 
     $list[] = '<option class="'.$class.'">'.$el.'</option>'; 
    } 
} 
$result = implode("\n", $list); 
Смежные вопросы