Как сопоставить и заменить значения одного массива на другие ключи массива, если они оба начинаются с одинаковых букв? - PullRequest
0 голосов
/ 19 сентября 2019

У меня есть два массива:

$array_one = array('AA','BB','CC');

И:

$replacement_keys = array
 (
 ""=>null,
 "BFC"=>'john',
 "ASD"=>'sara',
 "CSD"=>'garry'
);

Пока я пробовал

array_combine исделать цикл и попытаться найти значения, но на самом деле не могу найти решение, позволяющее сопоставить ключи второго массива со значениями первого и заменить его.

Моя цель - сделать окончательныйoutput:

$new_array = array
(
''=>null,
'BB' => 'john',
'AA' => 'sara',
'CC' => 'garry'
);

Другими словами, чтобы найти подходящую первую букву, а затем заменить ключ значением первого массива.

Любая помощь будет высоко оценена.

Ответы [ 2 ]

2 голосов
/ 19 сентября 2019

Вот решение, сохраняющее как $replacement_keys, так и $array_one без изменений

$tempArray = array_map(function($value){return substr($value,0,1);}, $array_one);
//we will get an array with only the first characters
$new_array = [];
foreach($replacement_keys as $key => $replacement_key) {
    $index = array_search(substr($key, 0, 1), $tempArray);
    if ($index !== false) {
        $new_array[$array_one[$index]] = $replacement_key;
    } else {
        $new_array[$key] = $replacement_key;
    }
}

Вот ссылка https://3v4l.org/fuHSu

1 голос
/ 19 сентября 2019

Вы можете подойти к этому, используя foreach с in_array

$a1 = array('AA','BB','CC');
$a2 = array(""=>null,"BFC"=>'john',"ASD"=>'sara',"CSD"=>'garry');
$r = [];
foreach($a2 as $k => $v){
 $split = str_split($k)[0];
 $split .= $split;
 in_array($split, $a1) ? ($r[$split] = $v)  : ($r[$k] = $v);
}

Рабочий пример: - https://3v4l.org/ffRWY

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...