我在PHP中遇到了一个非常奇怪且不常见的问题.我正在使用array_udiff作为对象数组.array_udiff生成的数组无法转换为有效的JSON格式.
我创建了相同的数组(等于array_udiff生成的数组),然后在JSON中转换该数组但是这个json结构完全正是我想要的.
我非常详细地写了一个例子来重现这个问题:
<?php
$a = array( (object) array('id'=>1, 'name'=>'abc'), (object) array('id'=>2, 'name'=>'xyz'), (object) array('id'=>6, 'name'=>'Amber'));
$b = array( (object) array('id'=>3, 'name'=>'david'), (object) array('id'=>1, 'name'=>'abc'));
$c = array_udiff($a, $b, 'comp_func');
function comp_func($obj1, $obj2)
{
return $obj1->id-$obj2->id;
}
echo '<h1>Array Generated by array_udiff:</h1><br> ';
print_r($c);
echo "<br><strong>Invalid JSON:</strong></br>";
echo json_encode($c);
echo "<br><br><br>";
echo '<h1>Manually created array:</h1><br> ';
$d = array( (object) array('id'=>2, 'name'=>'xyz'), (object) array('id'=>6, 'name'=>'Amber'));
print_r($d);
echo "<br><strong>Invalid JSON:</strong></br>";
echo json_encode($d);
Run Code Online (Sandbox Code Playgroud)
产量
正如你在上面的例子中看到的那样:print_r打印的两个数组都有类似的结构,但是当我尝试用JSON转换它们时,两个数组的JSON结构都不同,如截图所示.
我将不胜感激.谢谢
您的数组array_udiff()是从索引1开始的,这就是为什么json_encode()无法按照您想要的方式进行编码的原因.您只需更改此行:
$c = array_udiff($a, $b, 'comp_func');
Run Code Online (Sandbox Code Playgroud)
至:
$c = array_values(array_udiff($a, $b, 'comp_func'));
Run Code Online (Sandbox Code Playgroud)
这将从0开始索引数组.