更好的方法是先在数组中检查,然后再在数组中检查


better way to check if in array and then in array

我正在添加以下代码来检查是否应该选中复选框:

is_array($current_color_id_array) ? in_array('1', $current_color_id_array) : ''

我只是想知道是否有更好/更简洁的方法来做这件事?

编辑:抱歉我不够清楚,实际上我的代码是错误的…

这应该检查$current_color_id_array是否是一个数组,因为显然,如果我不检查它会给我错误警告:in_array()期望参数2是数组

,它还应该检查值是否在数组中,以将复选框标记为已选中。

这是复选框函数的一部分:

function tep_draw_checkbox_field($name, $value = '', $checked = false, $compare = '') {
    return tep_draw_selection_field($name, 'checkbox', $value, $checked, $compare);
  }

是第三个参数。所以如果我可以问这个问题,我会说有没有更好的写法:

tep_draw_checkbox_field('color_id[]', '1', (is_array($current_color_id_array) && in_array('1', $current_color_id_array)))

,为了以防万一,数组是这样生成的:

$color_id_query = tep_db_query("select color_id from " . TABLE_PRODUCTS_TO_COLORS . " where products_id = '" . (int)$product['products_id'] . "'");
    while ($color_id_row = mysql_fetch_array ($color_id_query)) {
    $current_color_id_array[] = $color_id_row['color_id'];
    }

上面的条件可以更简洁地写成:

is_array($current_color_id_array) && in_array('1', $current_color_id_array)

这实际上是与您的略有不同:您的代码将计算为true或空字符串,这将是truefalse

当然,如果您不检查$current_color_id_array是否为数组,则可以进一步缩小条件。变量的名字中有"array"你的代码是否有可能它不是真正的数组?

编辑:看看你的扩展问题,因为你完全负责创建数组,很容易避免需要"确保"你的数组存在。只要确保你在初始化你的数组变量,你就可以确保它总是被设置的,并且它总是一个数组。

$current_color_id_array = array();
$color_id_query = tep_db_query("select color_id from " . TABLE_PRODUCTS_TO_COLORS . " where products_id = '" . (int)$product['products_id'] . "'");
while ($color_id_row = mysql_fetch_array ($color_id_query)) {
    $current_color_id_array[] = $color_id_row['color_id'];
}

然后,您可以直接检查数组中的1,并且没有机会得到警告:

in_array('1', $current_color_id_array)

根据注释创建一个回显文本的函数,您可以使用以下函数:

function is_array_value($a,$b){
return (is_array($b)&&in_array($a, $b)) ? true : false;
}

我唯一能想到的就是通过包含

来保证$current_color_id_array实际上是数组。
$current_color_id_array = array();

我可能会把它们组合成一个条件语句,像这样:

$someBool = (is_array($myArray) && in_array('1', $myArray, true));

请注意,在检查'1'之类的东西时,您应该与in_array()函数进行严格的比较。