2016-04-12 25 views
-5

こんにちは私は複雑な配列を見やすく使いたいです。しかし、私は一種のスタックループPHP複雑な大規模な配列を単純にする方法

を作ってるんだ

は私が

'collection' => [ 
    (int) 0 => [ 
     'type' => 'col', 
     'name' => '2016 F/W', 
     'url' => 'blablabla' 
    ], 
    (int) 1 => [ 
     'type' => 'col', 
     'name' => '2015 F/W', 
     'url' => 'blablabla' 
    ], 
    (int) 2 => [ 
     'type' => 'project', 
     'name' => '2015 F/W', 
     'url' => 'blablabla' 
    ] 
] 

この配列は、シンプルたいと私はこの

ように、この配列をしたい私は、配列

について誤解か見てください

[ 
(int) 0 => [ 
    'type' => 'col', 
    'type2' => [ 
     (int) 0 => [ 
      'name' => '2016 F/W', 
      'image' => [ 
       (int) 0 => [ 
        'url' => null 
       ], 
       (int) 1 => [ 
        'url' => null 
       ] 
      ] 
     ], 
     (int) 1 => [ 
      'name' => '2015 F/W', 
      'image' => [ 
       (int) 0 => [ 
        'url' => null 
       ] 
      ] 
     ] 
    ] 
], 
(int) 1 => [ 
    'type' => 'project', 
    'type2' => [ 
     (int) 0 => [ 
      'name' => '2015 F/W', 
      'image' => [ 
       (int) 0 => [ 
        'url' => null 
       ] 
      ] 
     ], 
    ] 
] 

助けてください!私はほとんど夢中になっている!!!!

+0

起源は最初であり、結果は最後です –

+0

このようにするためにループをやっているのですが、あなたが何をしたのか分かりませんので、コードを入力する必要があります。 –

+0

1つの文字列から複数のイメージURLを作成する方法と比べて、2番目の結果が得られた場合はどうなりますか? – Justinas

答えて

1

私は結果配列があまり役に立ちそうにないと言わなければなりません。私は本当に結果配列のURL部分を理解していなかった

$arr = array(
     'collection' => array(
      array(
       'type' => 'col', 
       'name' => '2016 fw', 
       'url' => 'blabla1' 
      ), 
      array(
       'type' => 'col', 
       'name' => '2015 F/W', 
       'url' => 'blabla2' 
      ), 
      array(
       'type' => 'project', 
       'name' => '2015 F/W', 
       'url' => 'blabla_project' 
      ), 

     ), 
    ); 

    // $types array will hold a list of all types. type in this 
    // example is 'col' and 'project'. 
    // we will use $types to find if type X was already added to the 
    // result array. 
    $types = array(); 

    // Every type X will be in the result array in key K, So $typesMap 
    // will map between the type to the key in the result array. 
    // Example: type X is located in the result array under key K 
    // So I can find the type X data by looking at the 
    // $resultArr[K] 
    $typesMap = array(); 
    $typeIndx = 0; 

    // This is the result array. 
    $resultArr = array(); 

    // run over all collections 
    foreach($arr['collection'] as $collection){ 

     // get the current type. e.g 'col' 
     $type = $collection['type']; 

     // Search the $types array for 'col' to see if it was defined 
     // already. 
     if(!in_array($type, $types)) { 
      // if it wasn't defined then define it now: 

      // add it to the $types array so that we can find it on 
      // the next run. 
      $types[] = $type; 

      // define the key (K) that it will be in the $resultArr 
      $typesMap[$type] = $typeIndx; 

      // Create the 'col' key in the result array. 
      $resultArr[$typeIndx] = array('type' => $type, 'type2' => array()); 
      $typeIndx++; 
     } 

     // get the key for type $type. 
     // remember? I can use the $typesMap to find the type's index 
     // in the result array. 
     $currentIndx = $typesMap[$type]; 

     // add the extra data to the 'type2' (not a very good name for 
     // this) 
     $resultArr[$currentIndx]['type2'][] = array(
      'name' => $collection['name'], 
      'image' => $collection['url'] 
     ); 

    } 

私はちょうどそれを行うことができる方法についての私のテイクを提供します。この作業の目的について多くの情報がありませんので..

+0

それは私がうまく説明した多くの助けてくれてありがとう。 –

+0

これは素晴らしいですが、私はあなたのコードを読んで問題になります。私はあなたのコードを全く理解していません。私のための高度な連想配列の運動はありますか?あなたのコードを理解する? thanks –

+1

いくつかのコメントが更新されました。それを試してデバッグする必要があります。 xdebug? – carmel

関連する問題