2017-11-07 11 views
0

私はこの形式にオブジェクトを取得したいと思っています。私はこれを手に入れることができます。php配列操作のカスタム

この方法は、オプションに基づいて製品からバリアント数を生成する方法です。

私は、配列のループ内で静的変数に試してみましたが、それは2-4行方不明になってしまったバリアント

例私は必要なアウトプット

Yellow, M, 1Gb 
Yellow, M, 2GB 
Yellow, S, 1GB 
Yellow, S, 2GB 
Yellow, L, 1GB 
Yellow, L, 2GB 


Green, M, 1Gb 
Green, M, 2GB 
Green, S, 1GB 
Green, S, 2GB 
Green, L, 1GB 
Green, L, 2GB 

オブジェクトデータ

[ 
    [ 
     { 
      "id": 1, 
      "variantID": 1, 
      "option_name": "Yellow", 
      "imageID": 1 
     }, 
     { 
      "id": 2, 
      "variantID": 1, 
      "option_name": "Green", 
      "imageID": 2 
     } 
    ], 
    [ 
     { 
      "id": 3, 
      "variantID": 2, 
      "option_name": "M" 
     }, 
     { 
      "id": 4, 
      "variantID": 2, 
      "option_name": "S" 
     }, 
     { 
      "id": 5, 
      "variantID": 2, 
      "option_name": "L" 
     } 
    ], 
    [ 
     { 
      "id": 5, 
      "variantID": 3, 
      "option_name": "1GB" 
     }, 
     { 
      "id": 6, 
      "variantID": 3, 
      "option_name": "2GB" 
     } 
    ] 
] 

申し訳ありません:英語では良くありません

+0

データは、文字列jsonのでしょうか? – miglio

+0

はい、そのJSONオブジェクト@miglio – Raj

答えて

0

プラグイン:https://github.com/bpolaszek/cartesian-product

use function BenTools\CartesianProduct\cartesian_product; 

$data = [ 
    'color' => [ 
     'yellow', 
     'green' 
    ], 
    'size' => [ 
     'm', 
     's', 
     'l', 
    ], 
    'ram' => [ 
    '1 gb', 
    '2 gb', 
] 
]; 

foreach (cartesian_product($data) as $combination) { 
    printf('color: %s - size: %s - ram: %s' . PHP_EOL, $combination['color'], $combination['size'],$combination['ram']); 
} 

出力:

color: yellow - size: m - ram: 1 gb 
color: yellow - size: m - ram: 2 gb 
color: yellow - size: s - ram: 1 gb 
color: yellow - size: s - ram: 2 gb 
color: yellow - size: l - ram: 1 gb 
color: yellow - size: l - ram: 2 gb 
color: green - size: m - ram: 1 gb 
color: green - size: m - ram: 2 gb 
color: green - size: s - ram: 1 gb 
color: green - size: s - ram: 2 gb 
color: green - size: l - ram: 1 gb 
color: green - size: l - ram: 2 gb