繁体   English   中英

检查是否在数组中然后在数组中的更好方法

[英]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是否为数组,则可以进一步缩小条件。 公司得到了在名为“阵列”那里的变量,并您的代码实际上留下打开的可能性,这是不是一个真正的数组?

编辑:考虑到您提出的问题,由于您完全负责创建数组,因此很容易避免需要“确保”数组存在。 只要确保您正在初始化数组变量,就可以确保将其始终设置并且将始终是一个数组。

$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()函数进行严格比较。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM