PHP - 如何组合具有不同数量元素的两个数组?

时间:2017-08-14 23:11:46

标签: php arrays

我有两个数组:

一:

array(4) { 
 [0]=> array(2) { 
     [0]=> string(19) "Ford" 
     [1]=> string(1) "1" 
 } 
 [1]=> array(2) { 
     [0]=> string(15) "Chevrolet" 
     [1]=> string(1) "1" 
 } 
 [2]=> array(2) { 
     [0]=> string(7) "VW" 
     [1]=> string(1) "1" 
 } 
 [3]=> array(2) { 
     [0]=> string(4) "Fiat" 
     [1]=> string(1) "3" 
 } 
}

两个

array(6) { 
    [0]=> string(7) "#581845" 
    [1]=> string(7) "#900C3F" 
    [2]=> string(7) "#C70039" 
    [3]=> string(7) "#FF5733" 
    [4]=> string(7) "#FFC300" 
    [5]=> string(7) "#DAF7A6" 
}

现在,我需要第一个数组与第二个数组合,不包括第一个数组未使用的第二个数组。最后,我希望收到一个像:

这样的数组
[0]=> {
        [0]=> "Ford", 
        [1]=> "1", 
        [2]=>"#581845"
      } 
        [1]=>  
        ... 
      }

3 个答案:

答案 0 :(得分:1)

如果您总是拥有比自动制作更多的颜色,您可以这样做:

signed char

你应该检查这个条件,并为它做一个意外情况。

答案 1 :(得分:0)

另一个解决方案。独立于颜色数量。只会向品牌添加那些键与品牌键相同的颜色。

$brands = [
    ['Ford', 1],
    ['Chevrolet', 1],
    ['VW', 1],
    ['Fiat', 3],
];

$colors = [
    '#581845',
    '#900C3F',
    '#C70039',
    '#FF5733',
    '#FFC300',
    '#DAF7A6',
];

array_walk($brands, function(&$value, $key, $colors) {
    if (isset($colors[$key])) {
        $value = array_merge($value, [$colors[$key]]);
    }
}, $colors);

print_r($brands);

答案 2 :(得分:0)

我不是说你应该这样做,但我认为值得展示使用数组函数的替代方案:

var_dump(array_map(function($make, $color) {
    $make[] = $color;
    return $make;
}, $makes, array_slice($colors, 0, count($makes))));

我用过:

  1. array_slice减少$ colors数组,如果它太长了。
  2. 带有lambda(匿名函数)的array_map,它将lambda应用于每个元素并在完成时返回最终数组。