【问题标题】:Getting values from different keys belonging to different arrays and merging them into another array从属于不同数组的不同键中获取值并将它们合并到另一个数组中
【发布时间】:2012-01-12 16:32:41
【问题描述】:

我有两个包含不同键和值的数组。但是,一些键存储字符串(整数),我想将它们混合在一个数组中(即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 的特色图片和来自阵列#2 的住宿房间照片。我需要将所有这些数字收集到一个数组中(我不再需要键 - 我需要的是来自这些键的一系列数字,在上面的示例中:740、741、742、456、434) :

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

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

谢谢

【问题讨论】:

  • 你能提供一个例子来说明你希望你的最终数组是什么样子吗?
  • 检查我对“accommodation_roomphoto”和“featured_pic”感兴趣的两个键,我只需要一系列数字,例如(数字来自上面的示例):'740','741', 742','456','434

标签: php arrays key array-merge


【解决方案1】:

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

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

    希望这会有所帮助。

    【讨论】:

      【解决方案3】:

      使用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。

      【讨论】:

        猜你喜欢
        • 2020-04-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-06-03
        • 2011-12-07
        • 2017-02-16
        相关资源
        最近更新 更多