Warning: array_key_exists() [function.array-key-exists]: The second argument should be either an array or an object in D:\usr\www\zmy\www\originals.php on line 425Warning: array_key_exists() [function.array-key-exists]: The second argument should be either an array or an object in D:\usr\www\zmy\www\originals.php on line 425Warning: Invalid argument supplied for foreach() in D:\usr\www\zmy\www\originals.php on line 431
我定义的数组是:
$par['attr'][2] = "D";
$par['attr'][4] = "Fair";
$par['attr'][7]['from'] = "0.4";
$par['attr'][7]['to'] = "0.49";
我定义后,就出现上面的错误.从第419行开始是这样的代码: if ($par ['attr']) {
if ($relation == "OR") {
$sql = "SELECT goods_id FROM " . $GLOBALS ['ecs']->table ( "goods_attr" );
$attr_arr = array ();
$attr_num = 0;
foreach ( $par ['attr'] as $attr_id => $attr_value ) {
if (array_key_exists ( "from", $attr_value ) || array_key_exists ( "to", $attr_value )) {
if ($attr_value ['from'] > 0)
$attr_arr [] = "(attr_id = " . $attr_id . " AND attr_value >= '" . $attr_value ['from'] . "')";
if ($attr_value ['to'] > 0)
$attr_arr [] = "(attr_id = " . $attr_id . " AND attr_value <= '" . $attr_value ['to'] . "')";
} else {
foreach ( $attr_value as $val )
$attr_arr [] = "(attr_id = " . $attr_id . " AND attr_value LIKE '" . $val . "%')";
}
$attr_num ++;
}
$sql .= " WHERE " . implode ( " OR ", $attr_arr );
$sql .= " GROUP BY goods_id HAVING " . $attr_num;
$rows = $GLOBALS ['db']->getCol ( $sql );
if ($attr_num > 0)
$attr_in = db_create_in ( $rows, "g.goods_id" );
else
$attr_in = "";
}请大家指正。
我定义的数组是:
$par['attr'][2] = "D";
$par['attr'][4] = "Fair";
$par['attr'][7]['from'] = "0.4";
$par['attr'][7]['to'] = "0.49";
我定义后,就出现上面的错误.从第419行开始是这样的代码: if ($par ['attr']) {
if ($relation == "OR") {
$sql = "SELECT goods_id FROM " . $GLOBALS ['ecs']->table ( "goods_attr" );
$attr_arr = array ();
$attr_num = 0;
foreach ( $par ['attr'] as $attr_id => $attr_value ) {
if (array_key_exists ( "from", $attr_value ) || array_key_exists ( "to", $attr_value )) {
if ($attr_value ['from'] > 0)
$attr_arr [] = "(attr_id = " . $attr_id . " AND attr_value >= '" . $attr_value ['from'] . "')";
if ($attr_value ['to'] > 0)
$attr_arr [] = "(attr_id = " . $attr_id . " AND attr_value <= '" . $attr_value ['to'] . "')";
} else {
foreach ( $attr_value as $val )
$attr_arr [] = "(attr_id = " . $attr_id . " AND attr_value LIKE '" . $val . "%')";
}
$attr_num ++;
}
$sql .= " WHERE " . implode ( " OR ", $attr_arr );
$sql .= " GROUP BY goods_id HAVING " . $attr_num;
$rows = $GLOBALS ['db']->getCol ( $sql );
if ($attr_num > 0)
$attr_in = db_create_in ( $rows, "g.goods_id" );
else
$attr_in = "";
}请大家指正。
$par['attr'][4] = "Fair";
$par['attr'][7]['from'] = "0.4";
$par['attr'][7]['to'] = "0.49";foreach ( $par ['attr'] as $attr_id => $attr_value ) 时
分别得到
$attr_value = "D"
$attr_value = "Fair"
$attr_value['from'] = "0.4"
$attr_value['to'] = "0.49"前两个必然报错
$par['attr'][2] = "D";
if (array_key_exists ( "from", $attr_value ) || array_key_exists ( "to", $attr_value )) {
改为
if( is_array($attr_value) ) {
即可,其他不需要改动
第一个、第二个错误直接导致第三个错误的发生。第三个是SQL查询语句错了。
最后,你应该这样定义那个数组:
$par['attr'][2][] = "D";