основанный на in_array оператор if / then / else - PullRequest
1 голос
/ 19 июля 2011

Я ищу создание условия в выражении in_array.По сути, я хотел бы, чтобы значение (в тегах div) возвращалось для каждого ключа в массиве, который выводится Wordpress.В сущности, Wordpress выводит ключи из этого массива на основе диалогового окна в бэкэнде администратора.Таким образом, если ключ в массиве не найден (поскольку администратор не щелкнул его в флажке внутри бэкэнда), он просто не будет отображаться вообще.

Вот ближайший код, который я могу определить как необходимый.Я решил, что для целей тестирования я временно вернул бы слова «Нет», если бы в массиве не было ключа (а не «просто не отображать его», как упомянуто в параграфе выше).

$my_arr = get_custom_field('product_options');
$opts = array(
'Option 1' => '<div>Option 1 description</div>',
'Option 2' => '<div>Option 2 description</div>',
'Option 3' => '<div>Option 3 description</div>',
);

foreach($opts as $k=>$v) {
if (in_array($my_arr[$k],$opts)!==TRUE)  echo $v; else echo 'nope'; 
}
?>   

Приведенный выше код был протестирован, и он отображает «Option __ description» для всего.Он даже отображает «Описание варианта 2», когда параметр фактически не выводится в массиве (на основании того, что администратор не щелкнул вариант 2 в бэкэнде).Это не правильно, и я хочу получить его (в данном случае для простоты тестирования) эхо в части «else» вышеприведенного оператора.

Обновление 2: текущий код здесь:http://codepad.org/nxzFUMMn

Обновление: текущий код здесь: http://codepad.org/iXVbmLGL

Ответы [ 2 ]

1 голос
/ 22 июля 2011

Хитрость заключалась в том, чтобы переключать массивы, например,

<?php
$my_arr = get_custom_field('othermulti');

$opts = array(
    'Man' => '<div>Man description</div>',
    'Bear' => '<div>Bear description</div>',
    'Pig' => '<div>Pig description</div>',
);

$opts_arr = array_keys($opts);

if ( is_array($my_arr) ) {
    foreach($opts_arr as $opt) {
       if ( in_array($opt, $my_arr) ) {
          print $opts[$opt]; // will print the description for checked items.
       }
       else {
         print $opt . ' was not checked.';
       }
    }
}
else {
    print 'No options checked.';
}
?>

get_custom_field () - это настраиваемая функция шаблона для плагина, в котором она использовалась. Смотрите следующую ссылку для деталей: http://wordpress.org/support/topic/ifelse-statement-for-custom-checkbox?replies=16

0 голосов
/ 19 июля 2011

То, что происходит, указывает на то, что на самом деле ни одно из значений $my_arr не соответствует значению $opts.Я думаю, что вы хотите использовать

if (in_array($my_arr[$k], array_keys($opts)) !== TRUE) {

Также обратите внимание, что $my_arr[$k] === $v и in_array($x, $y) !== TRUE === !in_array($x, $y)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...