从属于不同数组的不同键获取值并将它们合并到另一个数组中

时间:2012-01-12 16:32:41

标签: php arrays key array-merge

我有两个包含不同键和值的数组。但是,一些键存储字符串(整数),我想在一个数组(即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)

我真正需要的是来自数组#1的featured_pic和来自数组#2的accommodation_roomphoto。我需要将所有这些数字收集到一个数组中(我不再需要键 - 我需要的是一系列来自这些键的数字,在上面的示例中:740,741,742,456,434) :

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

结果数组应该类似于上面的例子(顺序并不重要)

谢谢

3 个答案:

答案 0 :(得分:0)

$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()将字符串转换为新数组中的整数。

希望这有帮助。

答案 1 :(得分:0)

如果你知道你感兴趣的键,这只是一个简单的循环工作:

$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键也是数字。

答案 2 :(得分:0)

使用array_mergearray_map的单线程。假设您的两个数组是$a$b

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

传递给array_map的匿名函数需要PHP> = 5.3。