我正在添加以下代码来检查是否应该选中复选框:
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
或空字符串,这将是true
或false
。
当然,如果您不检查$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()
函数进行严格的比较。