samir chauhan
samir chauhan

Reputation: 1543

Merge 2 arrays in CakePHP

I have two arrays array1 and array2. I want to merge these two arrays into one and show the values of merged array in a dropdown. I want the values in a way that the value of first array - value of 2nd array.

e.g:

$employeePlaces1 = array(1, 2, 4,9);
$employeePlaces2 = array(3, 5, 6,7);

I want in dropdown the value as $employeePlaces1[0]-$employeePlaces2[1], $employeePlaces1[0]-$employeePlaces2[1].

    1-3,
    2-5,
    4-6, 
    9-7.

How can I do this ?

Upvotes: 2

Views: 3347

Answers (5)

powtac
powtac

Reputation: 41050

$employee1 = array(1, 2, 4, 9);
$employee2 = array(3, 5, 6, 7);

function doMerge($n, $m) {
    return $n.'-'.$m;
}


$c = array_map("doMerge", $employee1, $employee2);

print_r($c);

Or in PHP 5.3 syntax with lambda style functions:

$c = array_map(function($n, $m) {return $n.'-'.$m;}, $employee1, $employee2);

Upvotes: 2

Dunhamzzz
Dunhamzzz

Reputation: 14798

Here is how you could manually loop through them and match the values together.

$list = array();
for($i=0; $i<=count($employeePlaces1); $i++) {
    $list[] = $employeePlaces1[$i].'-'.$employeePlaces2[$i];
}

Haven't tested, but should be the gist of what you need.

Upvotes: 1

Leo
Leo

Reputation: 6571

Why not just loop over the arrays, i.e. do it longhand. Then you can get on with something else!

Edit in response to comment 1:

CakePHP is expecting:

<?php echo $this->Form->input('field', array('options' => array(
    'Value 1'=>'Label 1',
    'Value 2'=>'Label 2',
    'Value 3'=>'Label 3'
 ))); ?>

so something like (pseudocode):

resultsArray = array();
loop
    resultsArray[i] = inputArray_1[i]-inputArray_2[i];
endloop

in PHP (assumes size of array1 <= size of array2):

for($i=0;$i<count($inputArray_1);$i++)
{
    $resultsArr[$i] = $inputArray_1[$i]-$inputArray_2[$i];
}

Upvotes: 0

Clyde Lobo
Clyde Lobo

Reputation: 9174

You can use the array_diff function

http://www.php.net/manual/en/function.array-diff.php

Answer for the edited question

//assuming both the arrays have the same length
echo "<select>";
for($i=0;$i<count($employeePlaces1);$i++)
{
    echo "<option>".$employeePlaces1[i]." - ".$employeePlaces2[i]."</option>";
}
echo "</select>";

Upvotes: 2

Tomba
Tomba

Reputation: 1743

How about using array_combine?

http://www.php.net/manual/en/function.array-combine.php

Upvotes: 1

Related Questions