Получение значений из разных ключей, принадлежащих разным массивам, и объединение их в другой массив - PullRequest
0 голосов
/ 12 января 2012

У меня есть два массива, содержащих разные ключи и значения. Однако некоторые ключи хранят строки (целые числа), которые я хочу смешать вместе в одном массиве (т.е. array_merge). Все, что мне нужно, - это собрать целые числа.

при использовании var_dump массивы выглядят так:

это первый

array
    0 => 
        array
           'featured_pic' => string '740' (length=3)
    1 => 
        array
           'featured_pic' => string '741' (length=3)
    2 => 
        array
          'featured_pic' => string '742' (length=3)

а это уже второй

array
   0 => 
     array
       'accommodation_roomphoto' => string '456' (length=3)
       'accommodation_roomname' => string 'Single room' (length=11)
       'accommodation_roomsize' => string 'single' (length=6)
       'price_unit' => string '60' (length=2)
       'price_currency' => string 'USD' (length=3)
   1 => 
     array
       'accommodation_roomphoto' => string '434' (length=3)
       'accommodation_roomname' => string 'Double room' (length=11)
       'accommodation_roomsize' => string 'double' (length=6)
       'price_unit' => string '80' (length=2)
       'price_currency' => string 'USD' (length=3)

что мне действительно нужно, так это featured_pic из массива # 1 и Accommodation_roomphoto из массива # 2. Мне нужно собрать все эти числа в один массив (ключи мне больше не нужны - все, что мне нужно, - это последовательность чисел, полученных из этих ключей, в приведенном выше примере: 740, 741, 742, 456, 434) :

array
   0 => '740'
   1 => '741'
   2 => '742'
   3 => '456'
   4 => '434'

результирующий массив должен быть примерно таким, как в примере выше (порядок не важен)

Спасибо

Ответы [ 3 ]

0 голосов
/ 12 января 2012

Если вы знаете, какие ключи вам интересны, это просто зацикливание:

$result = array();

foreach ($array1 as $item) {
  if (isset($item['featured_pic'])) $result[] = (int) $item['featured_pic'];
}
foreach ($array2 as $item) {
  if (isset($item['accommodation_roomphoto'])) $result[] = (int) $item['accommodation_roomphoto'];
}

print_r($result);

В качестве альтернативы, если вы не знаете, какие ключи вам нужны, эта процедура будет захватывать все числа, хранящиеся какстроки из обоих массивов:

$result = array();

foreach ($array1 as $item) {
  foreach ($item as $sub) {
    if (is_numeric($sub)) $result[] = (int) $sub;
  }
}
foreach ($array2 as $item) {
  foreach ($item as $sub) {
    if (is_numeric($sub)) $result[] = (int) $sub;
  }
}

print_r($result);

... однако это не даст желаемого результата из вышеприведенного массива, поскольку ключ price_unit во втором наборе массивовтакже числовой.

0 голосов
/ 12 января 2012

Однострочник с использованием array_merge и array_map. Предполагается, что ваши два массива $a и $b:

$result = array_merge(
             array_map(function($el) { return $el['featured_pic']; }, $a),
             array_map(function($el) { return $el['accomodation_roomphoto']; }, $b)
          );

Требуется PHP> = 5.3 для анонимных функций, переданных в array_map.

0 голосов
/ 12 января 2012
$new_array = array();

foreach($array1 as $array) {
    $new_array[] = intval($array['featured_pic']);
}

foreach($array2 as $array) {
    $new_array[] = intval($array['accommodation_roomphoto']);
}

Это мое понимание вопроса.

Я просто сделал foreach для обоих массивов и извлек необходимую дату из каждого.

Я также использовал intval () для преобразования строк в целые числа в вашем новом массиве.

Надеюсь, это поможет.

...