У меня есть массив со 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()
для синхронизации своих заказов, чтобы обеспечить простое визуальное сравнение баллов.