2016-10-27 2 views
0

Учитывая следующий json, как проверить, имеет ли свойство shipmentWay одинаковое значение для каждого родительского элемента?Проверьте, имеет ли свойство одно значение в JSON

{ 
    "3":[ 
     { 
     "idOrdenCompraProducto":3, 
     "shipmentWay":"Confirmation Pending", 
     "qty":25000 
     } 
    ], 
    "4":[ 
     { 
     "idOrdenCompraProducto":4, 
     "shipmentWay":"Confirmation Pending", 
     "qty":3000 
     }, 
     { 
     "idOrdenCompraProducto":4, 
     "shipmentWay":"A\u00e9reo", 
     "qty":1500 
     }, 
     { 
     "idOrdenCompraProducto":4, 
     "shipmentWay":"Confirmation Pending", 
     "qty":1000 
     } 
    ], 
    "5":[ 
     { 
     "idOrdenCompraProducto":5, 
     "shipmentWay":"Confirmation Pending", 
     "qty":25000 
     }, 
     { 
     "idOrdenCompraProducto":5, 
     "shipmentWay":"Confirmation Pending", 
     "qty":25000 
     } 
    ] 
} 

Я действительно застрял в этом прямо сейчас, спасибо заранее!

+0

было бы легче, если вы не отправляли скриншот JSON но вместо фактического текста –

+0

, поскольку повторное отображение скриншота становится болью, которую я могу предложить, смотрит на [json_decode] (http://php.net/manual/en/function.json-decode.php), чтобы превратить его в объект –

+0

@ Memor-X вы правы. Это мой первый вопрос в SO. Я обновил свой вопрос с помощью строки json. – user3720752

ответ

0
<?php 
$json = '{ 
    "3":[ 
     { 
     "idOrdenCompraProducto":3, 
     "shipmentWay":"Confirmation Pending", 
     "qty":25000 
     } 
    ], 
    "4":[ 
     { 
     "idOrdenCompraProducto":4, 
     "shipmentWay":"Confirmation Pending", 
     "qty":3000 
     }, 
     { 
     "idOrdenCompraProducto":4, 
     "shipmentWay":"A\u00e9reo", 
     "qty":1500 
     }, 
     { 
     "idOrdenCompraProducto":4, 
     "shipmentWay":"Confirmation Pending", 
     "qty":1000 
     } 
    ], 
    "5":[ 
     { 
     "idOrdenCompraProducto":5, 
     "shipmentWay":"Confirmation Pending", 
     "qty":25000 
     }, 
     { 
     "idOrdenCompraProducto":5, 
     "shipmentWay":"Confirmation Pending", 
     "qty":25000 
     } 
    ] 
}'; 
$array = json_decode($json, true); 
$shipmentWay = array(); 
foreach($array as $key => $parent) 
{ 
    foreach($parent as $index => $child) 
    $shipmentWay[$key][$child['shipmentWay']] = true; 
} 
// var_dump($shipmentWay); 
    $result = array(); 
    foreach($shipmentWay as $key => $value) 
    { 
     $result[$key] = (count($value) > 1)?false:true; 
    } 
    var_dump($result); 

демонстрационных см https://eval.in/667231

выход

массив (3) {[3] => BOOL (истина) [4] => BOOL (ложь) [5] =>
BOOL (истина)}

+0

@ Memor-X Я отредактирую его раньше –

+0

Я получаю Уведомление: Неопределенный индекс: shipmentWay – user3720752

+0

@ user3720752 i edit it –

0

ок я создал this example

function jsonAllSame($jsonStr) 
{ 
    $object = json_decode($jsonStr); 

    foreach($object as $objArr) 
    { 
     $index = 0; 
     $compare = ""; 
     foreach($objArr as $obj) 
     { 
      if($compare == "") 
      { 
       $compare = $obj->shipmentWay; 
      } 
      else 
      { 
       if($obj->shipmentWay != $compare) 
       { 
        return false; 
       } 
      } 
     } 
    } 

    return true; 
} 

$json = '{ 
    "3":[ 
     { 
     "idOrdenCompraProducto":3, 
     "shipmentWay":"Confirmation Pending", 
     "qty":25000 
     } 
    ], 
    "4":[ 
     { 
     "idOrdenCompraProducto":4, 
     "shipmentWay":"Confirmation Pending", 
     "qty":3000 
     }, 
     { 
     "idOrdenCompraProducto":4, 
     "shipmentWay":"A\u00e9reo", 
     "qty":1500 
     }, 
     { 
     "idOrdenCompraProducto":4, 
     "shipmentWay":"Confirmation Pending", 
     "qty":1000 
     } 
    ], 
    "5":[ 
     { 
     "idOrdenCompraProducto":5, 
     "shipmentWay":"Confirmation Pending", 
     "qty":25000 
     }, 
     { 
     "idOrdenCompraProducto":5, 
     "shipmentWay":"Confirmation Pending", 
     "qty":25000 
     } 
    ] 
}'; 
$compare = "Confirmation Pending"; 

var_dump(jSonAllSame($json)); 

Главное, что вы хотите посмотреть, это функция jSonAllSame. то, что он делает, это строка json в качестве аргумента. внутри функции мы декодируем его, затем зацикливаем каждый массив объектов, которые он создает, используя 2 петли foreach.

В первый раз, когда мы идем через массив объектов (второй цикл foreach), нам нечего сравнивать, поэтому мы устанавливаем $compare как первое значение, которое мы видим.

на второй итерации с $compare не является пустым, мы можем сделать наше сравнение. если мы найдем одно значение, которое не соответствует, то мы остановим функцию там и вернем false, если мы сможем пройти через каждый массив объектов и не найти несоответствие, тогда мы вернем true.

вместо этого, если мы хотим, чтобы вернуть массив, который был первым несоответствие, предполагая, что номера соответствуют значениям idOrdenCompraProducto заменит из return false; в return $obj->idOrdenCompraProducto;

+0

Спасибо, что @ memor-x закончился решением ниже – user3720752

Смежные вопросы