Php 解码的JSON不';t在usort()中被识别为数组

Php 解码的JSON不';t在usort()中被识别为数组,php,arrays,json,Php,Arrays,Json,我有以下代码:- $category = json_decode($row['product_cat'], true); usort($category, "cmp"); 它会产生以下错误消息: PHP警告:usort()要求参数1为数组,在 /第22行的home/user/public_html/cron/test.php 为什么usort()参数中的$category未被识别为数组?事实上,这是一个从json解码的数组。有人知道为什么会出现此错误消息吗?多谢各位 以下是我的完整代码: f

我有以下代码:-

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

usort($category, "cmp");
它会产生以下错误消息:

PHP警告:usort()要求参数1为数组,在 /第22行的home/user/public_html/cron/test.php

为什么
usort()
参数中的
$category
未被识别为数组?事实上,这是一个从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>';
}
函数cmp($a,$b){
返回strcmp($a['id',$b['id');
}
而($row=$result->fetch_assoc()){
$category=json_decode($row['product_cat',true);
usort(类别“cmp”);
回声';
印刷品(类别);
回声';
}

在usort调用之前,需要输入if条件,因为有时输入中没有正确的json,所以json解码返回空值

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>'; 
}
函数cmp($a,$b){
返回strcmp($a['id',$b['id');
}
而($row=$result->fetch_assoc()){
$category=json_decode($row['product_cat',true);
如果(isset($category)&&!empty($category)){
usort(类别“cmp”);
}
回声';
印刷品(类别);
回声';
}

您显示的
json
数据似乎是正确的,但由于我们无法确保在循环期间输入的所有json都是正确的,因此我们必须以一种不会发生错误的方式更改代码。请执行以下操作:-

while($row=$result->fetch_assoc()){
$category=json_decode($row['product_cat',true);
//检查是否正确解码给定数组
if(is_数组($category)&&count($category)>1){
usort(类别“cmp”);
} 
回显“”;打印($category);回显“”;
}
注:-


我不会直接比较它将
null
,因为如果假设数组正确,但其中只有一个值,那么
usort($category,“cmp”)调用将不必要地发生(因为没有要排序的内容)。

能否显示
var\u dump($row['product\u cat'))的输出(我认为现在不是json,这就是为什么会出现错误)。我认为它是一个包含单个或逗号分隔id的字符串's@AlivetoDie:string(30)“[{”id:“1”,“value:“Console”}]”string(67)“[{”id:“18”,“value:“Games”},{”id:“36”,“value:“Nintendo Switch”}]”这是
var\u dump
这似乎正确。好的,这样做:-
while($row=$result->fetch_assoc()){$category=json_decode($row['product_cat'],true);if(is_array($category)&&count($category)>1){usort($category,“cmp”);}echo“”;print_r($category);echo“”}
@SaintRobson似乎有一段时间json不再有效,所以
json_decode
给出了null,而hense-usort提供了错误。
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>'; 
}