2013-07-18 3 views
0

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

Функция 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.

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

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

+0

Можете привести пример? Потому что я думаю, что вы используете слово «значение» для обозначения двух разных вещей в зависимости от контекста, и это запутывает. Иногда вы, по-видимому, имеете в виду «значение», как в паре «ключ-значение», а в других случаях вы вызываете целую пару «ключ-значение» «значение». Пожалуйста, заново сформулируйте свой вопрос, используя термины «ключ», «значение» и «запись» (также называемая парами «ключ-значение»), дискретно, _e.g._ «У меня есть массив с 100 _entries _...» –

+0

Thank Eric, Вы правы, я немного свободен с моим языком.массивы слишком длинны, чтобы дать вам, однако, оба массива содержат пары ключ-значение. Array2 имеет 8 восьми пар ключ-значение, а array1 - 100. Мне интересно только принимать значения в массиве2 и находить значения в массиве 1 для ключей, обозначенные значениями в массиве2. – GhostRider

ответ

1

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

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

И проверьте, существует ли ключ '$ value' в' $ array1'. –

1

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

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

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

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; 
+0

К сожалению, это не сработает. На самом деле ни одно из этих предложений не сработало. – GhostRider

+0

Чтобы получить более подробную информацию, array1 представляет собой пару ключевых значений. Значение в этом - оценка, которую дает врач на изображении, что является ключом. Второй массив также представляет собой набор пар ключ-значение, но гораздо меньший массив (всегда меньше) - ключ - это номер изображения, а значение - оценка для этого изображения, но другой врач. В основном, я пытаюсь вытащить все оценки у доктора 1 за небольшой набор изображений, набранных доктором 2. – GhostRider

+0

попробуйте приведенный выше код сейчас. – sudhakar

0

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

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

Код: (Demo)

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

+0

@GhostRider Я неправильно использовал эту страницу как двойную ссылку вчера. Поскольку ваш вопрос был немного неясен, я принял задание, которое вам было необходимо. Если это то, что вы ищете, пожалуйста, предоставьте зеленый галочку и, возможно, обновите свой вопрос, чтобы улучшить ясность. Если мой ответ не даст правильного результата, пожалуйста, найдите момент, чтобы объяснить, что не так. Спасибо. – mickmackusa

Смежные вопросы