我正在添加以下代码以检查是否应选中复选框:
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'];
}
答案 0 :(得分:3)
您上面的条件可以更简洁地写成:
is_array($current_color_id_array) && in_array('1', $current_color_id_array)
这实际上略微与您所拥有的不同:您的代码将评估为true
或空字符串,这将是true
或{{1} }。
当然,如果您没有检查false
是否为数组,您可以进一步缩小条件。变量得到了#34;数组"就在这个名称中,您的代码是否实际上留下了它 数组的可能性?
编辑:查看您的扩展问题,因为您完全负责创建阵列,因此很容易避免需要确保"确保"确保"确保"确保" 34;你的数组存在。只要确保你正在初始化你的数组变量,你就可以确定它总是被设置并且它将永远是一个数组。
$current_color_id_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
答案 1 :(得分:1)
根据创建回显文本功能的注释,您可以使用this function:
function is_array_value($a,$b){
return (is_array($b)&&in_array($a, $b)) ? true : false;
}
答案 2 :(得分:0)
我唯一能想到的就是保证$current_color_id_array
实际一个数组,包括
$current_color_id_array = array();
在脚本开头的某处。
答案 3 :(得分:0)
我可能会将它们组合成一个条件语句,如下所示:
$someBool = (is_array($myArray) && in_array('1', $myArray, true));
请注意,在检查“1”之类的内容时,您应该使用in_array()
函数进行严格比较。