В основном array
меня есть:
$array=array('index1'=>'value1', 'index2'=>'value2' , ....);
В другом массиве я сохраняю отношение key=>index
:
$map=array('key1'=>'index1', 'key2'=>'index2' , ...);
Есть ли простой способ объединить эти два массива в один, чтобы получить:
$combine=array('key1'=>'value1', 'key2'=>'value2', ...);
то есть значения из основного массива и ключи поступают из массива карт.
<?php
$array1=array('index1'=>'value1', 'index2'=>'value2');
$array2=array('key1'=>'index1', 'key2'=>'index2');
foreach($array2 as $key => $val){
if(array_key_exists($val,$array1))
$combined[$key] = $array1[$val];
}
// Output
print_r($combined);
?>
Вывод
Array
(
[key1] => value1
[key2] => value2
)
Вариант без собственного кода, только функции. Он принимает только ключи, представленные в обоих массивах:
$array=array('index1'=>'value1', 'index2'=>'value2' , 'index3'=>'value3');
$map=array('key1'=>'index1', 'key2'=>'index2');
// next two lines if arrays may be of different length
$newmap = array_intersect_key(array_flip($map), $array);
$newarray = array_intersect_key($array, $newmap);
$new = array_combine($newmap, $newarray);
var_dump ($new);
вывод:
array(2) { ["key1"]=> string(6) "value1" ["key2"]=> string(6) "value2" }
Возможное решение здесь, если ключи и значения уже находятся в ожидаемом порядке, и вы уверены, что все массивы имеют одинаковую длину, используйте функцию array_combine вместе с array_keys
и array_values
<?php
$array=array('index1'=>'value1', 'index2'=>'value2');
$map=array('key1'=>'index1', 'key2'=>'index2');
$combine = array_combine( array_keys($map), array_values($array) );
print_r($combine);
?>
Вывод
Array
(
[key1] => value1
[key2] => value2
)
Прокрутите массив $map
и извлеките значение для $array
соответственно и поместите их в массив $combine
comb. Вы можете попробовать это -
$array=array('index1'=>'value1', 'index2'=>'value2');
$map=array('key1'=>'index1', 'key2'=>'index2');
$combine = array();
foreach($map as $key => $val) {
$combine[$key] = $array[$val];
}
var_dump($combine);
Вывод
array(2) {
["key1"]=>
string(6) "value1"
["key2"]=>
string(6) "value2"
}