解码的JSON在usort()中无法识别为数组

时间:2017-10-11 05:17:40

标签: php arrays json

我有这个代码: -

$category = json_decode($row['product_cat'], true);

usort($category, "cmp");

并产生此错误消息:

  

PHP警告:usort()期望参数1为数组,在给定的情况下为null   第22行/home/user/public_html/cron/test.php

为什么$category参数中的usort()未被识别为数组?实际上,这是一个从json解码的数组。谁知道为什么会出现这个错误信息?谢谢。

这是我的完整代码:

function cmp($a, $b) {
    return strcmp($a['id'], $b['id']);
}

while ($row = $result->fetch_assoc()) {

    $category = json_decode($row['product_cat'], true);

    usort($category, "cmp");

    echo '<pre>';
    print_r($category);
    echo '</pre>';
}

2 个答案:

答案 0 :(得分:1)

你需要在调用之前放置if条件,因为有些时候正确的json没有进入你的输入,所以json decode返回null值。

function cmp($a, $b) {
    return strcmp($a['id'], $b['id']);
}

while ($row = $result->fetch_assoc()) {

    $category = json_decode($row['product_cat'], true);
    if(isset($category) && !empty($category)){
        usort($category, "cmp");
    }

    echo '<pre>';
    print_r($category);
    echo '</pre>';
}

答案 1 :(得分:1)

您显示的json数据似乎是正确的,但是我们无法确保所有json进入while循环是正确的,我们必须以不会发生错误的方式更改代码。所以如下所示: -

while ($row = $result->fetch_assoc()) { 
   $category = json_decode($row['product_cat'], true);
   // check decode give array properly
   if(is_array($category) && count($category)>1){
      usort($category, "cmp"); 
   } 
   echo '<pre>'; print_r($category); echo '</pre>'; 
}

注意: -

我直接比较它null,因为如果假设数组正确但但它只​​有一个值,则usort($category, "cmp");调用将不必要地发生(因为没有任何内容)排序)。