UI Dev
UI Dev

Reputation: 699

Create a unique array combining more than one array

I have the following code in PHP

foreach ($events as $event)
{
    $event = $event->organiser;
    var_dump($event);
}

Then i am getting output like for $event

array
 0 => string '40138' (length=5)
 1 => string '40137' (length=5)
array
 0 => string '40140' (length=5)
 1 => string '40138' (length=5)

Next i am creating a loop to get values as per the above ID (40137,40138) in to one array, here i want to create a unique array. How to do that ?

So as per the unique ID i can create the following UI

foreach ($events as $event)
{
if(!empty($event->organiser)){
        if(is_array($event->organiser)){
        foreach ($event->organiser as $organiser){
            $mentors_entities = get_entity($organiser);
            $name = $mentors_entities->title;

            $img = $vars['url'].'mod/mentor/icon.php?mentorguid='.$organiser;
            $body .= "<div class='event_mntdes'><div class='event_mntimg'><img src=".$img.'&size=large'."></div><div class='event_mntcontent'><b>".$name."</b><br/>".elgg_get_excerpt($mentors_entities->mentorshrt,'150')."</div></div>";  
        }
        }else{
            $organiser = $event->organiser;
            $mentors_entities = get_entity($organiser);
            $name = $mentors_entities->title;

            $img = $vars['url'].'mod/mentor/icon.php?mentorguid='.$organiser;
            $body .= "<div class='event_mntdes'><div class='event_mntimg'><img src=".$img.'&size=large'."></div><div class='event_mntcontent'><b>".$name."</b><br/>".elgg_get_excerpt($mentors_entities->mentorshrt,'150')."</div></div>";
        }
    }
}

So how to get the unique array combining of multiple array ?

Upvotes: 0

Views: 66

Answers (2)

Stalinko
Stalinko

Reputation: 3646

$organisers = array_reduce($events, function($ids, $el){ //lets collect all the ids in one array
    if(is_array($el->organiser)){
        $ids = array_merge($ids, $el->organiser);
    }else{
        $ids[] = $el->organiser;
    }
    return $ids;
}, array()); 
$orgsUnique = array_unique($organisers); //leave only uniqie ids

foreach ($orgsUnique as $organiser)
{
    //do what you need...
    $mentors_entities = get_entity($organiser);
    $name = $mentors_entities->title;

    $img = $vars['url'].'mod/mentor/icon.php?mentorguid='.$organiser;
    $body .= "<div class='event_mntdes'><div class='event_mntimg'><img src=".$img.'&size=large'."></div><div class='event_mntcontent'><b>".$name."</b><br/>".elgg_get_excerpt($mentors_entities->mentorshrt,'150')."</div></div>";
}

For php under 5.3 (when lamba-functions weren't supported):

function reduceFunc($ids, $el){ 
    if(is_array($el->organiser)){
        $ids = array_merge($ids, $el->organiser);
    }else{
        $ids[] = $el->organiser;
    }
    return $ids;
}

$organisers = array_reduce($events, 'reduceFunc', array()); //lets collect all the ids in one array
$orgsUnique = array_unique($organisers); //leave only uniqie ids

foreach ($orgsUnique as $organiser)
{
    //do what you need...
    $mentors_entities = get_entity($organiser);
    $name = $mentors_entities->title;

    $img = $vars['url'].'mod/mentor/icon.php?mentorguid='.$organiser;
    $body .= "<div class='event_mntdes'><div class='event_mntimg'><img src=".$img.'&size=large'."></div><div class='event_mntcontent'><b>".$name."</b><br/>".elgg_get_excerpt($mentors_entities->mentorshrt,'150')."</div></div>";
}

Upvotes: 1

AyB
AyB

Reputation: 11665

Not sure if this is what you looking for, but the below code makes sure your ID is not printed twice:

$rec_values = array(); // will store the array values
if(!empty($event->organiser)){
        if(is_array($event->organiser)){ 
        foreach ($event->organiser as $organiser){
            //checks if ID has been entered before
            //if not, display it
            if(!in_array($organiser,$rec_values)){
            $mentors_entities = get_entity($organiser);
            $name = $mentors_entities->title;

            $img = $vars['url'].'mod/mentor/icon.php?mentorguid='.$organiser;
            $body .= "<div class='event_mntdes'><div class='event_mntimg'><img src=".$img.'&size=large'."></div><div class='event_mntcontent'><b>".$name."</b><br/>".elgg_get_excerpt($mentors_entities->mentorshrt,'150')."</div></div>";  
            $rec_values[] =$organiser; //record the ID 
            }
        }
        }else{
            //same for the else part
            if(!in_array($organiser,$rec_values)){
            $organiser = $event->organiser;
            $mentors_entities = get_entity($organiser);
            $name = $mentors_entities->title;

            $img = $vars['url'].'mod/mentor/icon.php?mentorguid='.$organiser;
            $body .= "<div class='event_mntdes'><div class='event_mntimg'><img src=".$img.'&size=large'."></div><div class='event_mntcontent'><b>".$name."</b><br/>".elgg_get_excerpt($mentors_entities->mentorshrt,'150')."</div></div>";
            $rec_values[] =$organiser; //record the ID
            }
        }
    }

Upvotes: 1

Related Questions