in_array基于if / then / else语句

时间:2011-07-19 01:33:33

标签: php arrays if-statement

我想在in_array语句中创建一个条件。基本上,我想为Wordpress输出的数组中的每个键返回一个值(在div标签内)。实质上,Wordpress基于管理员后端中的复选框对话框从此阵列输出键。因此,如果找不到数组中的某个键(因为管理员没有在后端的复选框中单击它),那么它根本就不会显示它。

这是我能确定的最接近的代码。我决定,出于测试目的,如果阵列中的某个键不存在,我会暂时返回“Nope”字样(而不是如上段所述“根本不显示它”)。

$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'; 
}
?>   

上面的代码已经过测试,它显示了所有内容的“选项__描述”。当选项实际上没有在阵列中输出时,它甚至会显示“选项2描述”(基于管理员不在后端内点击选项2)。这是不正确的,我希望在上述声明的“else”部分内得到(在这种情况下为了便于测试)回声。

更新2:当前代码在此处:http://codepad.org/nxzFUMMn

更新:当前代码位于:http://codepad.org/iXVbmLGL

2 个答案:

答案 0 :(得分:1)

这里的技巧是切换阵列,例如

<?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

答案 1 :(得分:0)

正在发生的事情表明实际上$my_arr的所有值都不匹配$opts的值。我想你想用

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

另请注意$my_arr[$k] === $vin_array($x, $y) !== TRUE === !in_array($x, $y)

相关问题