2016-09-15 3 views
1

У меня есть следующий массив с 2-х элементов:PHP Как объединить 2 массивы в одном массиве

$attribute_metric = array(2) 
{ 
    [0]=> 
    array(2) { 
    [0]=> 
    string(5) "white" 
    [1]=> 
    string(6) " Black" 
    } 
    [1]=> 
    array(3) { 
    [0]=> 
    string(1) "S" 
    [1]=> 
    string(2) " L" 
    [2]=> 
    string(2) " M" 
    } 
} 

и я хочу, чтобы объединить его элементы в пути, где я получаю один массив, который содержит 6 элементов

array(6) { 
    [0]=> 
    string(8) "white, S" 
    [1]=> 
    string(8) "white, L" 
    [2]=> 
    string(8) "white, M" 
    [3]=> 
    string(8) "Black, S" 
    [4]=> 
    string(8) "Black, L" 
    [5]=> 
    string(8) "Black, M" 
} 

Я попытался следующие, но это не работает:

$size = 1; 
foreach ($attribute_metric as $key => $value) { 
    $size = $size * sizeof($value); 
} 
foreach ($attribute_metric as $key => $value) { 
    if($key > 0){ 
     foreach ($attribute_metric[0] as $subkey => $subvalue) { 
      array_push($subvalue,$value); 
     } 
    } 
} 

ответ

1

Попробуйте

<?php 
$list = array(array('white','Black'), array('S','L','M')); 
$result = array(); 
foreach ($list[0] as $k) { 
    foreach ($list[1] as $t) { 
     $result[] = $k.','.$t; 
    } 
} 
var_dump($result); 
?> 
+0

Большое спасибо за вашу помощь. Я выберу его как лучший ответ, так как мои массивы не могут быть всегда цветами и размером .. так это делает его более динамичным. – Alladin

3
$array1= $attribute_metric[0]; //['white','black'] 
$array2= $attribute_metric[1]; // ['S', 'L', 'M'] 
$resultArray = []; 


foreach ($array1 as $color){ 
    foreach ($array2 as $size){ 
     $resultArray[] = $color . ', ' . $size; 
    } 
} 

print_r($resultArray); 

результаты

Array 
(
    [0] => white, S 
    [1] => white, L 
    [2] => white, M 
    [3] => black, S 
    [4] => black, L 
    [5] => black, M 
) 
+2

'$ resultArray [] = $ цвета. ','. $ size; '-> умьте« запятую ». – masterFly

2

Если исходные массивы не слишком велики, то с помощью вложенных циклов, позволит вам создавать желаемый результат.

$colours=array('white','black'); 
$sizes=array('s','m','l'); 

$out=array(); 
foreach($colours as $colour){ 
    foreach($sizes as $size){ 
     $out[]=$colour.', '.$size; 
    } 
} 
print_r($out); 
+0

добро пожаловать – RamRaider

0

Просто для полноты, и если вы хотите сделать это только с помощью функции массива:

$output = array_reduce(array_map(function($a) use($attribute_metric) { 
      return array_map(function($b) use($a) { return $a . ', ' . $b; }, $attribute_metric[1]); 
}, $attribute_metric[0]), 'array_merge', []); 
Смежные вопросы