Karl Wong
Karl Wong

Reputation: 605

Copy array key into another existing array key

I have 2 arrays, one with key, another with numeric keys, how can i copy they key, replacing the numeric keys in the exact order?

Array with numeric key

Array
(
    [0] => ABCDEFG
    [1] => This is my description
    [2] => 12.00
    [3] => 30.00
    [4] => My supplier
    [5] => My brand
    [6] => Shoes
    [7] => 

)

Array 2

Array
(
    [productcode] => Product Code
    [productitemdesc] => Description
    [retailsalesprice] => Selling Price
    [currentcost] => Unit Cost
    [supplier] => Supplier
    [productbrand] => Brand
    [productcategory] => Category
    [productgroup] => Group
)

I would want something like this

Array
    (
        [productcode] => ABCDEFG
        [productitemdesc] => This is my description
        [retailsalesprice] => 12.00
        [currentcost] => 30.00
        [supplier] => My Supplier
        [productbrand] => My Brand
        [productcategory] => Shoes
        [productgroup] =>
    )

Is there any existing functions available for php? Tried array_fill_keys but doesn't seem to be what i want.

Upvotes: 0

Views: 1754

Answers (5)

R.S Namdhari
R.S Namdhari

Reputation: 93

you can use array_combine()

$array3=array_combine($array2,$array1);
   print_r($array3);

Upvotes: -1

andreas karimi
andreas karimi

Reputation: 192

i tested it and work :

<?php
$a=array(
0 => "ABCDEFG",
1 => "This is my description",
2 => "12.00",
3 => '30.00',
4 => 'My supplier',
5 => 'My brand',
6 => 'Shoes',
7 => '',

)
;
$b=array
(
'productcode' => 'Product Code',
'productitemdesc' => 'Description',
'retailsalesprice' => 'Selling Price',
'currentcost' => 'Unit Cost',
'supplier' => 'Supplier',
'productbrand' => 'Brand',
'productcategory' => 'Category',
'productgroup' => 'Group',
);
 $j=0;
 foreach ($b as $i => $value) {
    $b[$i]=$a[$j];
    $j++;
}
 var_dump($b);

?>

Upvotes: 0

jerdiggity
jerdiggity

Reputation: 3665

The other answers are definitely more efficient, but in case you'd like to learn how to manually loop through arrays, something like this should work:

<?php

// The original array
$arr1 = array(
    0 => 'ABCDEFG',
    1 => 'This is my description',
    2 => '12.00',
    3 => '30.00',
    4 => 'My supplier',
    5 => 'My brand',
    6 => 'Shoes',
    7 => '',
);

// The second array
$arr2 = array(
    'productcode' => 'Product Code',
    'productitemdesc' => 'Description',
    'retailsalesprice' => 'Selling Price',
    'currentcost' => 'Unit Cost',
    'supplier' => 'Supplier',
    'productbrand' => 'Brand',
    'productcategory' => 'Category',
    'productgroup' => 'Group',
);

// Pre-define the new array to avoid errors
$arr_new = array();

// Manually create a value to increment during our foreach loop
$increment = 0;

// Loop through each value in $arr2
foreach ($arr2 as $key2 => $value2) {
  // If the key is set in $arr1, assign the value from $arr1 and the key from $arr2
  // to the new array
  if (isset($arr1[$increment])) {
    $arr_new[$key2] = $arr1[$increment];
  }
  // Increment the value regardless of whether it was found in $arr1 or not
  $increment++;
}

// Remove this if you want... It just displays the values found in $arr_new
print_r($arr_new);

Upvotes: 0

Amit Joshi
Amit Joshi

Reputation: 1354

array_combine way is a lot better but you can use this function as well. This will allow you to modify the values if you want.

function custom_combine($numeric_array, $keyed_array)
{   
    $temp = array();
    $i=0;
    foreach($keyed_array as $key=>$val)
    {
        if(isset($numeric_array[$i]))       
            $temp[$key] = $numeric_array[$i];
        else
            $temp[$key] ='';
        $i++;           
    }   
    return($temp);
}

Upvotes: 0

Dan
Dan

Reputation: 5358

You can use the function array_combine() to combine the keys from the second array (for the following example called $array_keys) with the values from the first array (called $array_values):

Example:

$combined = array_combine(array_keys($array_keys), $array_values);
print_r($combined);

This prints out the array exactly like you described.

Upvotes: 6

Related Questions