Объедините 2 массива разной длины

У меня есть массив со 100 значениями (array1). У меня есть другой массив с 8 значениями (array2). Я хочу взять значения из массива2 и использовать их в качестве ключей и извлечь значения в массиве1 для этих ключей.

Функция array_combine не будет работать, поскольку они имеют разную длину.

я пытался

function array_combine2($arr1, $arr2) { $count = min(count($arr1), count($arr2)); return array_combine(array_slice($arr1, 0, $count), array_slice($arr2, 0, $count)); } 

Но это не работает ….. это дает мне массив с правильными ключами, но значения неверны, я думаю, потому что он нарезает array1.

Может ли кто-нибудь помочь. Я знаю это много литературы, но все они дают решения, очень похожие на то, что выше, которое не работает.

Большое спасибо за то время, которое вы взяли.

что-то вроде этого:

 function combine($array1, $array2) { $array3 = array(); foreach ($array2 as $key => $value) { //loop through all entries of array2 //get the entry of array1 that corresponds to the value of array2's entry if (isset($array1[$value]) { $array3[$key] = $array1[$value] } } return $array3; } 

Я не тестировал его, но он должен дать вам кое-что для размышлений.

Попробуй это. зациклируйте второй массив и извлеките значение из массива1 с использованием значения array2 в качестве индекса для массива 1

 foreach ( $array2 as $arr2 ){ $temp[]= $array[ $arr2 ]; } return $temp; 

вы можете использовать ниже код

 function array_combine2($arr1, $arr2) { foreach($arr2 as $val){ $arr3[] = $arr1[$val]; } return $arr3; } 

Для inctanse,

  $arr1['x'] = 2; $arr1['y'] = 3; $arr1['z'] = 4; $arr2[0] = 'x'; $arr2[1] = 'y'; $arr2[2] = 'z'; 

вышеуказанная функция вернет ниже как resbonse

 $arr3[0] = 2; $arr3[1] = 3; $arr3[2] = 4; 

К сожалению, array_slice() будет игнорировать любую связь между массивами на основе ключей / индексов. array_slice() работает с использованием значений offset ; поэтому это неправильный инструмент для работы.

array_intersect_key() является подходящим вызовом для фильтрации массива с использованием ключей другого массива.

Код: ( Демо )

 for($char='A',$score=100; $score>0; ++$char,--$score){ $dr_img_scores1["IMG_$char"]=$score; // generate 100 unique elements } //var_export($dr_img_scores1); // uncomment to see what this looks like // eight arbitrary elements to use as extraction keys on $array1 $dr_img_scores2=['IMG_CL'=>13,'IMG_Z'=>44,'IMG_BP'=>82,'IMG_L'=>50, 'IMG_CD'=>2,'IMG_X'=>91,'IMG_BM'=>7,'IMG_AV'=>0]; var_export(array_intersect_key($dr_img_scores1,$dr_img_scores2)); // notice that $dr_img_scores1's element order is preserved 

Вывод:

 array ( 'IMG_L' => 89, 'IMG_X' => 77, 'IMG_Z' => 75, 'IMG_AV' => 53, 'IMG_BM' => 36, 'IMG_BP' => 33, 'IMG_CD' => 19, 'IMG_CL' => 11, ) 

Примечание. Если $dr_img_scores1 или $dr_img_scores2 не в порядке, вы можете использовать ksort() для синхронизации своих заказов, чтобы обеспечить простое визуальное сравнение баллов.