比较PHP中的两个JSON

时间:2015-12-18 00:57:39

标签: php json

这是我在PHP中的代码,

<?php
$query = "SELECT items FROM `ppmp` ORDER BY date DESC LIMIT 1";
  if($result2 = $con->query($query)) {
   $row = $result2->fetch_array();
  $items2 = $row['items'];
 }
 $items = $_POST['ris4'];
 $items = json_decode($items,true);
 $items2 = json_decode($items2,true);

for($i = 0; $i < sizeOf($items["items"]);$i++){
for($i2 = 0; $i2 < sizeOf($items2["items"]); $i2++){
    $val = $items["items"][$i]["Desc"];
    $val2 = $items2["items"][$i2]["Desc"];
    print_r($val);
    print_r($val2);
    if(strcmp($val, $val2) == 0){
     echo "same";
    }
}
}
?>

我要减去产品的数量.. 但我无法检测这两个描述是否相同..

我使用strcmp()但它不起作用..我回应了描述,它有相同的描述。但是==运算符无效。

这是$items2 JSON的布局,

{"items":[{"Desc":" Pencil ","Qty":25},{"Desc":" Ballpen ","Qty":5},{"Desc":" Tech Pen ","Qty":20}]}

这是$items

{"items":[{"Desc":" Tech Pen ","Qty":15},{"Desc":" Ballpen ","Qty":4}]}

4 个答案:

答案 0 :(得分:2)

假设我们有...

JSON OBJ 1 {“ key1”:“消息”,“ key2”:“消息”,“ key3”:“消息”}

JSON OBJ 2 {“ key2”:“ message2”,“ key3”:“ message3”,“ key1”:“ message1”}

使用这样的代码:

$responseMatch = json_decode($obj1) == json_decode($obj2);
return $responseMatch ? 'responses match!' : 'responses dont match!';
我已经在许多用例中进行了测试,

将为您提供想要的东西

答案 1 :(得分:1)

我建议您使用array_diff。这样,您可以确保它们与JSON结构中的内容完全匹配。

    $it_1 = json_decode($items, TRUE);
    $it_2 = json_decode($items2, TRUE);
    $result_array = array_diff($it_1,$it_2);


    if(empty($result_array[0])){     
        echo "they are same";
    }

答案 2 :(得分:0)

假设你的说法&#39;是一个纯文本字符串,你可以检查这些:

children

更新:

if (strcmp($val, $val2) !== 0) {
   //they are not the same
}

你说这不起作用但我在我的localhost上测试它并且正常工作。

答案 3 :(得分:0)

试试这个。

$items1 = json_decode('{"items":[{"Desc":" Tech Pen ","Qty":15},{"Desc":" Ballpen ","Qty":4}]}');
$items2 = json_decode('{"items":[{"Desc":" Pencil ","Qty":25},{"Desc":" Ballpen ","Qty":5},{"Desc":" Tech Pen ","Qty":20}]}');

for($i=0;$i<count($items1->items);$i++){
    for($j=0;$j<count($items2->items);$j++){
        $val = $items1->items[$i]->Desc;
        $val2 = $items2->items[$j]->Desc;
        if($val == $val2){
            $items2->items[$j]->Qty -= $items1->items[$i]->Qty;
        }
    }
}
print_r($items2);

将输出

[items] => Array
        (
            [0] => stdClass Object
                (
                    [Desc] =>  Pencil 
                    [Qty] => 25
                )

            [1] => stdClass Object
                (
                    [Desc] =>  Ballpen 
                    [Qty] => 1
                )

            [2] => stdClass Object
                (
                    [Desc] =>  Tech Pen 
                    [Qty] => 5
                )

        )