<?php
// If they are not of same size, here is solution:
$abbreviations = array("AL", "AK", "AZ", "AR", "TX", "CA");
$states = array("Alabama", "Alaska", "Arizona", "Arkansas");
function combine_arr($a, $b)
{
$acount = count($a);
$bcount = count($b);
$size = ($acount > $bcount) ? $bcount : $acount;
$a = array_slice($a, 0, $size);
$b = array_slice($b, 0, $size);
return array_combine($a, $b);
}
$combined = combine_arr($abbreviations, $states);
print_r($combined);
// Output
// Array ( [AL] => Alabama [AK] => Alaska [AZ] => Arizona
// [AR] => Arkansas )
?>
array_combine
(PHP 5)
array_combine — Creates an array by using one array for keys and another for its values
Description
array array_combine
( array $keys
, array $values
)
Creates an array by using the values from the keys array as keys and the values from the values array as the corresponding values.
Parameters
- keys
-
Array of keys to be used. Illegal values for key will be converted to string.
- values
-
Array of values to be used
Return Values
Returns the combined array, FALSE if the number of elements for each array isn't equal or if the arrays are empty.
Errors/Exceptions
Throws E_WARNING if keys and values are either empty or the number of elements does not match.
Examples
Example #1 A simple array_combine() example
<?php
$a = array('green', 'red', 'yellow');
$b = array('avocado', 'apple', 'banana');
$c = array_combine($a, $b);
print_r($c);
?>
The above example will output:
Array ( [green] => avocado [red] => apple [yellow] => banana )
array_combine
quecoder at gmail
26-Aug-2008 03:00
26-Aug-2008 03:00
J.D.D.
09-Aug-2008 04:31
09-Aug-2008 04:31
This may be obvious, but I don't see anything about it on the manual page, so a friendly warning... The array you are using as keys must have all unique values. If not, array elements get dropped.
<?php
$arr_notUnique = array('one' , 'one' , 'two');
$arr_b = array('red' , 'green' , 'blue');
$arr_combo = array_combine($arr_notUnique, $arr_b);
?>
Results: Array ( [one] => green [two] => blue )
NOT: Array ( [one] => red [one] => green [two] => blue )
Zoran
02-Apr-2008 08:57
02-Apr-2008 08:57
Also, Khalys function only works if keys of both arrays are the same because array_combine ignores keys. An easy way to ignore them is by taking array_values(). Floats can be casted to strings to avoid overwriting.
So, the PHP4 function could look something like this:
<?php
function array_combine($arr1, $arr2) {
$out = array();
$arr1 = array_values($arr1);
$arr2 = array_values($arr2);
foreach($arr1 as $key1 => $value1) {
$out[(string)$value1] = $arr2[$key1];
}
return $out;
}
?>
Mike Jean
19-Mar-2008 01:59
19-Mar-2008 01:59
Khaly's PHP4 code below does not work correctly in all cases. Consider when your array consists of floats:
<?php
$okay = array(0, 10, 20, 30);
$not_okay = array(0, 0.5, 1, 1.5);
$foo = array_combine($okay, $okay);
$bar = array_combine($not_okay, $not_okay);
/*
Results:
$foo = {
[0]=> int(0)
[10]=> int(10)
[20]=> int(20)
[30]=> int(30)
}
$bar = {
[0]=> float(0.5)
[1]=> float(1.5)
}
*/
?>
What can you do? In my case, I was just zipping up some select-box options, so I converted everything in my floats to strings.
Khaly
04-Oct-2007 05:11
04-Oct-2007 05:11
This is the function for PHP4 :
<?php
function array_combine($arr1,$arr2) {
$out = array();
foreach($arr1 as $key1 => $value1) {
$out[$value1] = $arr2[$key1];
}
return $out
}
?>
neoyahuu at yahoo dot com
20-Mar-2007 12:36
20-Mar-2007 12:36
Some tips for merging same values in an array
<?php
$array1 = array(1,2,3,4,5,6,7,8,9,10,11,12);
$array2 = array(1,2,3,13);
$merged = array_merge($array1,$array2);
// output normal array_merge
echo '<pre>After array_merge :
';
print_r($merged);
echo '</pre>';
// do double flip for merging values in an array
$merged = array_flip($merged);
$merged = array_flip($merged);
// Output after
echo '<pre>After Double Flip :
';
print_r($merged);
echo '</pre>';
?>
Output ::
After array_merge :
Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => 4
[4] => 5
[5] => 6
[6] => 7
[7] => 8
[8] => 9
[9] => 10
[10] => 11
[11] => 12
[12] => 1
[13] => 2
[14] => 3
[15] => 13
)
After Double Flip :
Array
(
[12] => 1
[13] => 2
[14] => 3
[3] => 4
[4] => 5
[5] => 6
[6] => 7
[7] => 8
[8] => 9
[9] => 10
[10] => 11
[11] => 12
[15] => 13
)
ifeghali at interveritas dot net
26-Feb-2005 01:53
26-Feb-2005 01:53
Use that code to group an array by its first element.
<?
function groupbyfirst($array)
{
foreach ($array as $row)
{
$firstkey = array_keys($row);
$firstkey = $firstkey[0];
$key = $row[$firstkey];
unset($row[$firstkey]);
$newarray[$key][] = $row;
}
return $newarray;
}
?>
Example:
<?
$array =
Array(
0 => Array('color' => 'red','name' => 'apple', 'quantity' => '3'),
1 => Array('color' => 'green','name' => 'pear', 'quantity' => '2'),
2 => Array('color' => 'yellow','name' => 'corn', 'quantity' => '3'),
3 => Array('color' => 'blue','name' => 'grape', 'quantity' => '4'),
4 => Array('color' => 'yellow','name' => 'banana', 'quantity' => '13'),
);
$output = groupbyfirst($array);
print_r($output);
?>
will return:
Array
(
[red] => Array ( [0] => Array ( [name] => apple [quantity] => 3 ) )
[green] => Array ( [0] => Array ( [name] => pear [quantity] => 2 ) )
[yellow] => Array ( [0] => Array ( [name] => corn [quantity] => 3 ), [1] => Array ( [name] => banana [quantity] => 13 ) )
[blue] => Array ( [0] => Array ( [name] => grape [quantity] => 4 ))
)
Or you can use mysql recordset:
<?
while ($row=mysql_fetch_array($result,MYSQL_ASSOC))
{
$firstkey = array_keys($row);
$firstkey = $firstkey[0];
$key = $row[$firstkey];
unset($row[$firstkey]);
$newarray[$key][] = $row;
}
?>
aidan at php dot net
20-May-2004 10:15
20-May-2004 10:15
This functionality is now implemented in the PEAR package PHP_Compat.
More information about using this function without upgrading your version of PHP can be found on the below link:
http://pear.php.net/package/PHP_Compat
