2016-07-14 6 views
2

Мне нужна помощь :) Я должен закодировать скрипт, который циклически перемещается по массиву внутри массива, удаляет элемент, если в поле XXX нет значения (это NULL). Мой массив:Цитирование массива и удаление объекта

Array ( 
[idCampaign] => 3 
[idIT] => 322 
    [recipients] =>Array ( 
     [0] => stdClass Object ([name] => minnie [email] => [email protected] [XXX] =>) 
     [1] => stdClass Object ([name] => [email] => [email protected] [XXX] => 0.88451100) 
    )) [date] => MongoDate Object ([sec] => 1468503103 [usec] => 0)) 

В этом примере элемент [0] не имеет никакого значения в значение XXX поэтому мой выходной массив будет:

Array ( 
[idCampaign] => 3 
[idIT] => 322 
    [recipients] =>Array ( 
     [1] => stdClass Object ([name] => [email] => [email protected] [XXX] => 0.88451100) 
    )) [date] => MongoDate Object ([sec] => 1468503103 [usec] => 0)) 

я надеюсь, что вы можете мне помочь :)

+0

преобразовать в массив и использовать 'unset' метода – C2486

+1

ну, что вы пытались достичь своей цели до сих пор? мы здесь, чтобы помочь вам составить код, а не код для вас. –

+0

Вы можете использовать array_filter() см. Http://php.net/array_filter – MrMagix

ответ

1

Вы можете использовать вложенную foreach() Loop для циклического данных, а затем выполнить некоторые тесты, которые при сбое гарантируют, что безопасно отключить соответствующую переменную. Вот так:

<?php 
    // WE SIMULATE SOME DATA TO POPULATE THE ARRAY, ONLY FOR TESTING PURPOSES 
    $objDate  = new stdClass();  
    $objRez1  = new stdClass(); 
    $objRez2  = new stdClass(); 

    $objRez1->name = "minnie"; 
    $objRez1->email = "[email protected]"; 
    $objRez1->XXX = null; 

    $objRez2->name = null; 
    $objRez2->email = "[email protected]"; 
    $objRez2->XXX = 0.88451100; 

    $objDate->sec = 1468503103; 
    $objDate->usec = 0; 

    // IN THE END WE NOW HAVE A SAMPLE ARRAY (SIMULATED) TO WORK WITH. 
    $arrData  = array(
     'idCampaign' => 3, 
     'idIT'   => 322, 
     'recipients' => array(
      $objRez1, 
      $objRez2 
     ), 
     'date'   =>$objDate, 
    ); 


    // LOOP THROUGH THE ARRAY OF DATA THAT YOU HAVE 
    // NOTICE THE &$data IN THE LOOP CONSTRUCT... 
    // THIS IS NECESSARY FOR REFERENCING WHEN WE UNSET VARIABLES WITHIN THE LOOP 
    foreach($arrData as $key=>&$data){ 
     // SINCE THE XXX KEY IS STORED IN THE 'recipients' ARRAY, 
     // WE CHECK IF THE CURRENT KEY IS 'recipients' & THAT $data IS AN ARRAY 
     if($key == "recipients" && is_array($data)){ 
      // NOW WE LOOP THROUGH THE DATA WHEREIN THE 'XXX' KEY LIVES 
      foreach($data as $obj){ 
       // IF THE VALUE OF THE XXX KEY IS NULL OR NOT SET, 
       // WE SIMPLY UNSET IT... 
       if(!$obj->XXX){ 
        unset($obj->XXX); 
       } 
      } 
     } 
    } 

    var_dump($arrData); 

Вы можете проверить результаты HERE.

Надеется, что это может предложить вам небольшой совет о том, как реализовать это правильно самостоятельно ...

+0

благодарит за возможность поблагодарить! –

0

Это должно сделать работу

foreach($arrayOfObjects as $index => $object){ 
    if(!isset($object->xxx) || empty($object->xxx)){ 
     unset($arrayOfObjects[$index]); 
    } 
} 
Смежные вопросы