我在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);
输出
所以你可以在上面的例子中看到: print_r打印的两个数组都有类似的结构,但当我尝试用JSON转换它们时,两个数组的JSON结构都不同,如截图所示。
我将感激任何贡献。 感谢
答案 0 :(得分:7)
array_udiff()
中的数组是从索引1开始的,这就是为什么json_encode()
无法按照您想要的方式进行编码的原因。您只需更改此行:
$c = array_udiff($a, $b, 'comp_func');
要:
$c = array_values(array_udiff($a, $b, 'comp_func'));
这将从0开始索引数组。