2016-11-17 1 views
1

Объяснение:Iterate PHP массива и проверки данных

Использование PHP, у меня есть форма, которая позволяет пользователям создавать исходящие заказы.

Пользователь может выбрать, какой элемент инвентаря они хотели бы отправить в определенном поле # конкретному клиенту.

Я хотел бы добавить валидацию в эту форму, потому что пользователь не должен выбирать двух разных клиентов для одного и того же блока #.

Пример:

Person A -> Item A -> Box 1 
Person A -> Item B -> Box 1 
Person B -> Item C -> Box 2 
Person B -> Item D -> Box 1 //!! <- This should not be possible because          
Person C -> Item E -> Box 3  //Person A is already using Box #1. 

Когда форма отправлена ​​я создаю массив так:

$data = (object) array 
    (
    array (
     "customer" => "Person A", 
     "item" => "Item A", 
     "box" => "Box 1" 
    ), 
    array (
     "customer" => "Person A", 
     "item" => "Item B", 
     "box" => "Box 1" 
    ), 
    array (
     "customer" => "Person B", 
     "item" => "Item C", 
     "box" => "Box 2" 
    ), 
    array (
     "customer" => "Person B", 
     "item" => "Item D", 
     "box" => "Box 1" 
    ), 
    array (
     "customer" => "Person C", 
     "item" => "Item E", 
     "box" => "Box 3" 
    ) 

); 

Вопрос:

Как я могу идти о переборе массива чтобы убедиться, что каждый человек имеет свой собственный ящик №?

Это то, что я пытаюсь, но я застревать:

$temp_arr = (object) array(); 

foreach($data as $row){ 

    if(!property_exists($temp_arr, $row['customer'])){ 
     $temp_arr->$row['customer'] = array(); 
    }; 

    //Load the boxes into the correct customer array 
    if(in_array($row['box'], $temp_arr->$row['customer'])){ 
     //Duplicate 
    } else { 
     array_push($temp_arr->$row['customer'], $row['box']); 
    } 

} 
+0

так что если у человека есть предмет, но используя принятые коробки # что элемент должен идти к пользователю с отмеченной коробкой # ? – ksealey

+0

Если поле уже выполнено, проверка завершается, и пользователь предупреждается о том, что они не могут использовать 2 клиента для одного и того же блока # – osbt

ответ

1
<?php 
    $used_boxes = array(); 
    $valid_data = array(); 
    foreach($data as $row){ 
     if(!in_array($used_boxes)){ 
      //Box not used 
      $valid_data[$row['customer']] = $row['box']; 
      $used_boxes[] = $row['box'] 
     }else{ 
      //Box already used 
     } 
    } 
    var_dump($valid_data); 
Смежные вопросы