2015-05-01 3 views
1

Я хочу использовать значения моего первого массива $ selection (которые всегда являются числами) в качестве ключей для других категорий $ category и выводить только выбранные ключи.использовать значения первого массива для выбора значений второго массива

См. Код ниже, очень новый для php.

<?php 

    $selection = array('1', '4', '5'); 
    $categories = array('fruit', 'bread', 'desert', 'soup', 'pizza'); 

    $multiple = array_combine($selection, $categories); 

    print_r($multiple); 

?> 

поэтому должен вывести что-то вроде:

Array ([1] => fruit [4] => soup [5] => pizza) 
+0

Как вы относитесь к случаям, в которых разница между $ и $ категориями отличается? – max

+0

точно. Этот пример здесь работает только тогда, когда количество значений одинаково. Мне нужно решение, чтобы просто выбрать значения второго массива с заданными значениями первого. – tgifred

+0

Итак, где мы с этим вопросом? – Rizier123

ответ

1

Это должно работать для вас:

Просто получить array_intersect_key() от обоих массивов: $selection и $categories.

Обратите внимание, что поскольку массив является индекс, основанный 0, вы должны пройти через ваш $selection массив с array_map() и вычесть один из каждого значения, чтобы затем использовать array_flip().

И в конце вы можете просто array_combine() пересечение обоих массивов с массивом $selection.

$result = array_combine($selection, 
    array_intersect_key(
     $categories, 
     array_flip(
      array_map(function($v){ 
       return $v-1; 
      }, $selection) 
     ) 
    )); 

выход:

Array ([1] => fruit [4] => soup [5] => pizza) 
1

Что-то вроде это работает для вас?

<?php 
    $selection = array('1', '4', '5'); 
    $categories = array('fruit', 'bread', 'desert', 'soup', 'pizza'); 
    $multiple = array(); 

    foreach($selection as $value) { 
     if (isset($categories[$value - 1])) 
      $multiple[$value] = $categories[$value - 1]; 
     } 
    } 

    print_r($multiple); 
?> 
+0

Как это каким-либо образом разрешает его проблему? 'isset ($ categories [$ value]' всегда будет false. – max

+0

Я так не думаю, почему бы это быть? –

+0

да, это намного проще, потому что для меня не имеет значения, где начинается подсчет. Спасибо Federico и Rizier123! – tgifred

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