当前位置: 首页 > 知识库问答 >
问题:

如何解决OsCommerce,警告: sizeof():参数必须是一个数组或一个实现可数的对象

涂选
2023-03-14

我安装最新版本的OSCommerce框架。在后端类别/产品错误显示如下:

警告: sizeof():参数必须是一个数组或一个在第93行实现C:\xampp\htdocs\osCommerce\catalog\admin\包括\函数\general.php中可数的对象

我尝试使用is\u array()count()但仍然不起作用,下面是代码

    function tep_get_path($current_category_id = '') {
    global $cPath_array;

    if ($current_category_id == '') {
      $cPath_new = implode('_', $cPath_array);
    } else {
      if (sizeof($cPath_array) == 0) {
        $cPath_new = $current_category_id;
      } else {
        $cPath_new = '';
        $last_category_query = tep_db_query("select parent_id from " . TABLE_CATEGORIES . " where 
        categories_id = '" . (int)$cPath_array[(sizeof($cPath_array)-1)] . "'");
        $last_category = tep_db_fetch_array($last_category_query);

        $current_category_query = tep_db_query("select parent_id from " . TABLE_CATEGORIES . " where 
        categories_id = '" . (int)$current_category_id . "'");
        $current_category = tep_db_fetch_array($current_category_query);

        if ($last_category['parent_id'] == $current_category['parent_id']) {
          for ($i = 0, $n = sizeof($cPath_array) - 1; $i < $n; $i++) {
            $cPath_new .= '_' . $cPath_array[$i];
          }
        } else {
          for ($i = 0, $n = sizeof($cPath_array); $i < $n; $i++) {
            $cPath_new .= '_' . $cPath_array[$i];
          }
        }

        $cPath_new .= '_' . $current_category_id;

        if (substr($cPath_new, 0, 1) == '_') {
          $cPath_new = substr($cPath_new, 1);
        }
      }
    }

    return 'cPath=' . $cPath_new;
  }

共有3个答案

钱凌
2023-03-14

您还可以使用空()。它检查一个变量是否“虚假”。

if (empty($cPath_array)) { }

而不是

if (sizeof($cPath_array) == 0) { }
洪浩波
2023-03-14

sizeof是count的别名。

Count的行为在Php 7.2中发生了变化。

Count()现在将对传递给array_or_countable参数的无效可数类型产生警告。

可能原因:

var_dump(count([])); // OK
var_dump(count((object)[])); // Warning
var_dump(count(null)); // Warning
var_dump(count(false)); // Warning
var_dump(count(123)); // Warning
var_dump(count('123')); // Warning

请使用var_dump检查$cPath_array数据类型。$cPath_array在代码中被实现为数组,但是它的实际值是什么,警告被生成。

糟糕的临时解决方案:降级您的Php版本。

桂高昂
2023-03-14

我在文件中添加了下面的代码,就在给出错误的那一行。

if ($cPath_array == null) {
    $cPath_array = array();
}

它解决了我的错误

 类似资料: