2016-07-14 5 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

작업을 수행해야합니다 데이터를 검사 한 다음 몇 가지 테스트를 수행합니다. 실패 할 경우 관련 변수의 설정을 해제하는 것이 안전하다는 것을 보증합니다. 방법은 다음과 같습니다.

<?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() 루프를 사용할 수

foreach($arrayOfObjects as $index => $object){ 
    if(!isset($object->xxx) || empty($object->xxx)){ 
     unset($arrayOfObjects[$index]); 
    } 
}