Измените ключи массива с массивом карты в PHP

1

В основном array меня есть:

 $array=array('index1'=>'value1', 'index2'=>'value2' , ....);

В другом массиве я сохраняю отношение key=>index:

$map=array('key1'=>'index1', 'key2'=>'index2' , ...);

Есть ли простой способ объединить эти два массива в один, чтобы получить:

$combine=array('key1'=>'value1', 'key2'=>'value2', ...);

то есть значения из основного массива и ключи поступают из массива карт.

  • 0
    Вы пробовали что-то или провели какое-то исследование?
Теги:
arrays

4 ответа

2
<?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
)
1

Вариант без собственного кода, только функции. Он принимает только ключи, представленные в обоих массивах:

$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" }
1

Возможное решение здесь, если ключи и значения уже находятся в ожидаемом порядке, и вы уверены, что все массивы имеют одинаковую длину, используйте функцию 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
)
  • 2
    Хафф, хорошо, все ключи в правильном порядке, иначе весь ваш код сломался бы.
  • 0
    @ Rizier123> Да, вы правы. Ключи и значения должны быть в правильном порядке, как я указал в ответе, а также они должны быть одинаковой длины, хотя PHP вернет FALSE, если это не так.
1

Прокрутите массив $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"
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню