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 = "";
}请大家指正。

解决方案 »

  1.   

    $par ['attr'] 不是一个二维数组?
      

  2.   

     $attr_value有可能不是数组。
      

  3.   

    $par['attr'][2] = "D";
    $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"前两个必然报错
      

  4.   

    那大家说我前面的数组只有一个值的,该怎么定义
    $par['attr'][2] = "D";
      

  5.   


    if (array_key_exists ( "from", $attr_value ) || array_key_exists ( "to", $attr_value )) {
    改为
    if( is_array($attr_value) ) {
    即可,其他不需要改动
      

  6.   

    提示的第一个、第二个错误是说不是一个二维数组,$attr_value 应该是一个二维数组。
    第一个、第二个错误直接导致第三个错误的发生。第三个是SQL查询语句错了。
    最后,你应该这样定义那个数组:
    $par['attr'][2][] = "D";