我有这个代码: -
$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>';
}
答案 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");
调用将不必要地发生(因为没有任何内容)排序)。