Сравнить индексы массивов

Есть два массива:

$arr  = ['a','b','c','d'] 
$arr2 = ['b','c','d'] 

Я могу как-то сделать, чтобы повторяющиеся элементы получили во втором массиве индексы первого? То есть, чтобы это выглядело [1] => b [2] => c [3] => d у $arr2.


Ответы (3 шт):

Автор решения: Bloom
<?php
    $arr = ['a','b','c','d'] ;
    $arr2 = ['b','c','d']  ;
    $result = array_intersect($arr, $arr2);

    foreach ($arr as $key => $value) {    
        foreach ($result as $key1 => $value1) {
            if( $value == $value1 ) {
                $arr3[$key] = $value1;
            }
        }
    }    
    print_r($arr3);    
?>
→ Ссылка
Автор решения: Alpha

Ещё один вариант:

$arr = ['a','b','c','d'];
$arr2 = ['b','c','d'];

$arr3 = [];
foreach($arr2 as $item){
    if(in_array($item, $arr)){
        $key = array_search($item, $arr);
        $arr3[$key] = $item;
    }
}

Другой случай, если во втором массиве будут элементы которых нет в 1м

$arr = ['a','b','c','d'];
$arr2 = ['b','c','d','j'];

$arr3 = [];
foreach($arr2 as $item){
    if(in_array($item, $arr)){
        $key = array_search($item, $arr);
        $arr3[$key] = $item;
    }else{
        $arr3[] = $item;
    }
}
→ Ссылка
Автор решения: Ivan
$arr  = ['a','b','c','e','d'];
$arr2 = ['b','c','d'] ;

$arr2 = array_intersect($arr, $arr2);
print_r($arr2);

или

$diff = array_diff($arr, $arr2);
$arr2 = $arr;

foreach ($diff as $key => $val){
    unset($arr2[$key]);
}

print_r($arr2);
→ Ссылка