如何使用php创建动态组合?

时间:2019-03-14 13:04:16

标签: php laravel

我有3个数组,例如

$arr = [
  "color" => [["name"=>"red"]],
  "size" => [["name"=>"18 inch"], ["name"=>"15 inch"]],
  "type" => [["name"=>"plastic"]]
]
$combo = array();
    foreach ($arr['size'] as $size) {
        foreach($arr['color'] as $color){
           foreach ($arr['type'] as $type) {
               $variant =  json_encode(['size' => $size->name, 'color' => 
                                   $color->name, 'type' => $type->name]);
               array_push($combo,$variant);
           }
        }
    }
echo $combo;

//结果

0 => "{"size":"15 inch","color":"yellow","type":"metal"}"
1 => "{"size":"18 inch","color":"yellow","type":"plastic"}"

它可以正常工作,但是可以有更少或更多的变体。我该如何处理。 例如

$arr = [
   "size" => [["name"=>"18 inch"], ["name"=>"15 inch"]],
   "type" => [["name"=>"plastic"]]
]

 $arr = [
    "color" => [["name"=>"red"]],
    "size" => [["name"=>"18 inch"], ["name"=>"15 inch"]],
    "type" => [["name"=>"plastic"]],
    "brand" => [['name' => 'something']],
 ]

1 个答案:

答案 0 :(得分:1)

据我了解,您必须将属性数组合并为一个数组 对象。

我现在必须离开,但是如果您需要解释请发表评论,我会更新答案

$arr = [
    "color" => [["name"=>"red"],['name'=>'yellow']],
    "size" => [["name"=>"18 inch"], ["name"=>"15 inch"]],
    "type" => [["name"=>"plastic"]],
    "brand" => [['name' => 'something']],
];

function runFor($arr ,&$array, $keys,$index,&$positions){
    foreach ($arr[$keys[$index]] as $key => $espec){
        $positions[$keys[$index]] = $key;
        if($index + 1 < count($keys)){
            runFor($arr,$array,$keys, $index+1,$positions);
        }else{
            $item = (object)[];
            foreach ($keys as $key){
                $item->$key = $arr[$key][$positions[$key]]['name'];
            }
            array_push($array,$item);
        }
        unset($positions[$keys[$index]]);
    }
}


$array = array();
$keys = array_keys($arr);
$positions = [];
runFor($arr,$array,$keys,0,$positions);
$combo = array();
foreach ($array as $item){
    array_push($combo,json_encode($item));
}
var_dump($combo);
相关问题