2016-06-24 6 views
0

私はPHPで非常に奇妙で珍しい問題に直面しています。 オブジェクトの配列にarray_udiffを使用しています。 array_udiffで生成された配列を有効なJSON形式に変換できませんでした。PHP: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); 

出力

enter image description here

あなたは上記の例で見ることができるように: 両方の配列がしますprint_rによって印刷同様の構造を持っていますが、両方をJSONで変換しようとすると、両方の配列のJSON構造がスクリーンショットのように異なります。

私は貢献を感謝します。 ありがとう

+0

から配列:

$c = array_udiff($a, $b, 'comp_func'); 

へ:あなたは、単にこの行を変更できますか?私はそれが正しい出力 –

+0

だと思うので、jsonのみを受け入れるjavascript ajaxからjson出力を受け取っています。 エラー "parseerror"を投げています これは遠い話題です。今のところ大きな問題は、2つのJSONが異なる理由です。それらは両方とも同じ構造であるとみなされます – user2899728

+0

あなたが見ているように、一方はオブジェクト指向ですが、他方はネストされています。 []と{}の違いをご確認ください –

答えて

7

array_udiff()の配列はインデックス1から始まっています。そのため、json_encode()は必要な方法でエンコードできません。あなたはJSON形式のが無効であることを言うのはなぜ

$c = array_values(array_udiff($a, $b, 'comp_func')); 

この意志のインデックス0

関連する問題