Вот мой код в 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}]}
Я бы предложил вам использовать 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";
}
Предположим, у нас есть...
JSON OBJ 1 {"key1": "message", "key2": "message", "key3": "message"}
JSON OBJ 2 {"key2": "message2", "key3": "message3", "key1": "message1"}
Используя такой код:
$responseMatch = json_decode($obj1) == json_decode($obj2);
return $responseMatch ? 'responses match!' : 'responses dont match!';
даст вам то, что вы хотите, я проверял во многих случаях использования
Предположим, что ваша "Desc" - это простая текстовая строка, которую вы можете проверить следующим образом:
if (strcmp($val, $val2) !== 0) {
//they are not the same
}
ОБНОВИТЬ:
$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( strcmp($val, $val2) == 0 ){
echo "Item ".$val." match with ".$val2." ";
//$items2->items[$j]->Qty -= $items1->items[$i]->Qty;
}else{
echo "Item ".$val." don't match with ".$val2." ";
}
}
}
Вы говорите, что это не работает, но я тестирую это на своем локальном хосте и работает нормально.
Попробуй это.
$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
)
)