2

I need help :) I've to code a script that, cycling through an array inside an array , delete an element if in XXX field there isn't value (is NULL ). My array is:

    Array ( 
[idCampaign] => 3 
[idIT] => 322 
     [recipients] =>Array ( 
        [0] => stdClass Object ( [name] => minnie  [email] => blabla@gmail.com [XXX] => ) 
        [1] => stdClass Object ( [name] => [email] => fddd@gmail.it [XXX] => 0.88451100 ) 
    ) ) [date] => MongoDate Object ( [sec] => 1468503103 [usec] => 0 ) )

In this example the item [0] has no value in XXX value so my output array will be:

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

i hope that you can help me :)

Steve Aged
  • 121
  • 1
  • 9

2 Answers2

1

You could use a nested foreach() Loop to cycle through the Data and then perform some tests, which on failing, guarantees that it is safe to unset the pertinent variable. Here's how:

<?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 = "blabla@gmail.com";
    $objRez1->XXX   = null;

    $objRez2->name  = null;
    $objRez2->email = "fddd@gmail.it";
    $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);

You can verify the Results HERE.

Hope this could offer you a little tip on how to implement it rightly on your own...

Poiz
  • 7,306
  • 2
  • 11
  • 17
0

This should do the job

foreach($arrayOfObjects as $index => $object){
    if(!isset($object->xxx) || empty($object->xxx)){
        unset($arrayOfObjects[$index]);
    }
}
t.mac
  • 26
  • 1