Сравнить и заменить значения в массиве
Мне нужно сравнить 2 массива, первый массив имеет один порядок и не может измениться, в другом массиве у меня есть другие значения, первый массив должен сравнить его идентификатор с идентификатором другого массива, и если идентификатор это то же самое, возьмите значение и замените на шоу все в том же порядке
Например:
$array_1=array("1a-dogs","2a-cats","3a-birds","4a-people");
$array_2=array("4a-walking","2a-cats");
Результат в этом случае я хочу получить вот это:
"1a-dogs","2a-cats","3a-birds","4a-walking"
Если идентификатор в этом случае 4a, то же самое, эта запись должна быть модифицирована и поставить значение другого массива и остаться все в том же порядке
Я делаю это, но не заставляй меня работать
for($fte=0;$fte<count($array_1);$fte++)
{
$exp_id_tmp=explode("-",$array_1[$fte]);
$cr_temp[]="".$exp_id_tmp[0]."";
}
for($ftt=0;$ftt<count($array_2);$ftt++)
{
$exp_id_targ=explode("-",$array_2[$ftt]);
$cr_target[]="".$exp_id_targ[0]."";
}
/// Here I tried use array_diff and others but no can get the results as i want
Как я могу сделать это для получения этих результатов?
4 ответа
Может быть, вы могли бы использовать функцию array_udiff_assoc() с обратным вызовом
$array_1=array("1a-dogs","2a-cats","3a-birds","4a-people");
$array_2=array("4a-walking","2a-cats");
function merge_array($arr1, $arr2) {
$arr_tmp1 = array();
foreach($arr1 as $val) {
list($key, $val) = explode('-', $val);
$arr_tmp1[$key] = $val;
}
foreach($arr2 as $val) {
list($key, $val) = explode('-', $val);
if(array_key_exists($key, $arr_tmp1))
$arr_tmp1[$key] = $val;
}
return $arr_tmp1;
}
$result = merge_array($array_1, $array_2);
echo '<pre>';
print_r($result);
echo '</pre>';
Этот короткий код работает правильно, вы получите такой результат:
Array
(
[1a] => dogs
[2a] => cats
[3a] => birds
[4a] => walking
)
Ну вот. Это не самый чистый код, который я когда-либо писал.
Пример запуска: http://3v4l.org/kUC3r
<?php
$array_1=array("1a-dogs","2a-cats","3a-birds","4a-people");
$array_2=array("4a-walking","2a-cats");
function getKeyStartingWith($array, $startVal){
foreach($array as $key => $val){
if(strpos($val, $startVal) === 0){
return $key;
}
}
return false;
}
function getMergedArray($array_1, $array_2){
$array_3 = array();
foreach($array_1 as $key => $val){
$startVal = substr($val, 0, 2);
$array_2_key = getKeyStartingWith($array_2, $startVal);
if($array_2_key !== false){
$array_3[$key] = $array_2[$array_2_key];
} else {
$array_3[$key] = $val;
}
}
return $array_3;
}
$array_1 = getMergedArray($array_1, $array_2);
print_r($array_1);
Сначала разбейте 2 массива на правильные пары ключ и значение (ключ = 1a и значение = собаки). Затем попробуйте выполнить цикл по первому массиву, и для каждого из его ключей проверьте, существует ли он во втором массиве. Если это так, замените значение из второго массива в первый. И в конце ваш первый массив будет содержать желаемый результат.
Вот так:
$array_1 = array("1a-dogs","2a-cats","3a-birds","4a-people");
$array_2 = array("4a-walking","2a-cats");
function splitArray ($arrayInput)
{
$arrayOutput = array();
foreach ($arrayInput as $element) {
$tempArray = explode('-', $element);
$arrayOutput[$tempArray[0]] = $tempArray[1];
}
return $arrayOutput;
}
$arraySplit1 = splitArray($array_1);
$arraySplit2 = splitArray($array_2);
foreach ($arraySplit1 as $key1 => $value1) {
if (array_key_exists($key1, $arraySplit2)) {
$arraySplit1[$key1] = $arraySplit2[$key1];
}
}
print_r($arraySplit1);
Смотрите это работает здесь: http://3v4l.org/2BrVI