2017-11-09 3 views
0

に最初のインデックスを返します。foreachループは、私はこのようになります配列内の配列内の配列を持つ多次元配列

$flattened_pics = array (
    [0] = array (
     _A = array (a bunch of data), 
     _B = array (a bunch of data) 
    ), 
    [1] = array (
     _A = array (a bunch of data), 
     _B = array (a bunch of data) 
    ) 
) 

私は外側の配列に次の関数を実行すると、それが正常に結果を返します。 index [0]の内部配列ですが、index [1]はありません。

$goods['arts'] = Goods_Model_Ajax::convertLettered_arrays($flattened_pics); 

は、私は両方$ flattened_picsの結果を返すためにそれを必要とする[0]と$ flattened_pics [1]。

私は単一のforeachループ(以下のような)、ネストされたforeachループ、および他のバリエーションを試しました。おそらく私はこれにインデックスを置く必要がありますが、わかりません。

if($flattened_pics) { 
     foreach($flattened_pics AS $goods) { 
      $goods['pics'] = array(Goods_Model_Ajax::convertLettered_arrays($goods) 
      ); 

     } 
    } 

次に、convertLettered_arraysの機能を示します。

public static function convertLettered_arrays($pics) 
{ 
    $out_pictures = array(); 
    $out_pictures['picture_a'] = array(); 
    $out_pictures['picture_b'] = array(); 
    $out_pictures['picture_c'] = array(); 
    $out_pictures['picture_d'] = array(); 

    $out_pictures['picture_a']['image'] = $pics[0]['_A']['picture_temp.image']; 
    $out_pictures['picture_a']['original'] = $pics[0]['_A']['picture_temp.original']; 
    $out_pictures['picture_a']['width'] = $pics[0]['_A']['picture_temp.width']; 
    $out_pictures['picture_a']['height'] = $pics[0]['_A']['picture_temp.height']; 
    $out_pictures['picture_a']['mime'] = $pics[0]['_A']['picture_temp.mime']; 

    $out_pictures['picture_b']['image'] = $pics[0]['_B']['picture_temp.image']; 
    $out_pictures['picture_b']['original'] = $pics[0]['_B']['picture_temp.original']; 
    $out_pictures['picture_b']['width'] = $pics[0]['_B']['picture_temp.width']; 
    $out_pictures['picture_b']['height'] = $pics[0]['_B']['picture_temp.height']; 
    $out_pictures['picture_b']['mime'] = $pics[0]['_B']['picture_temp.mime']; 

    $out_pictures['picture_c']['image'] = $pics[0]['_C']['picture_temp.image']; 
    $out_pictures['picture_c']['original'] = $pics[0]['_C']['picture_temp.original']; 
    $out_pictures['picture_c']['width'] = $pics[0]['_C']['picture_temp.width']; 
    $out_pictures['picture_c']['height'] = $pics[0]['_C']['picture_temp.height']; 
    $out_pictures['picture_c']['mime'] = $pics[0]['_C']['picture_temp.mime']; 

    $out_pictures['picture_d']['image'] = $pics[0]['_D']['picture_temp.image']; 
    $out_pictures['picture_d']['original'] = $pics[0]['_D']['picture_temp.original']; 
    $out_pictures['picture_d']['width'] = $pics[0]['_D']['picture_temp.width']; 
    $out_pictures['picture_d']['height'] = $pics[0]['_D']['picture_temp.height']; 
    $out_pictures['picture_d']['mime'] = $pics[0]['_D']['picture_temp.mime']; 

    return $out_pictures; 
} 
+0

私は問題があなたの関数convertLettered_arraysであると仮定()。私たちはこの機能がなければ助けません。 –

+0

Tx @VincentDecaux、関数を追加しました。関数がインデックスを反復処理していないようです – ian

答えて

0

このようにループする必要があります。

if ($flattened_pics) { 
    foreach ($flattened_pics AS $goods) { 
     $converted[] = Goods_Model_Ajax::convertLettered_arrays($goods); 
    } 
} 

は、その後、あなたのconvertLettered_arrays機能で、あなただけのすべての[0]を削除します。このような何か:あなたが変換された配列

var_dump($converted)をダンプすることで出力を確認することができます

$out_pictures['picture_a']['image'] = $pics['_A']['picture_temp.image']; 
$out_pictures['picture_a']['original'] = $pics['_A']['picture_temp.original']; 
$out_pictures['picture_a']['width'] = $pics['_A']['picture_temp.width']; 
$out_pictures['picture_a']['height'] = $pics['_A']['picture_temp.height']; 
$out_pictures['picture_a']['mime'] = $pics['_A']['picture_temp.mime']; 

。あなたが太いコードを避けることができるように

私もちょうどあなたのconvertLettered_arrays機能にループすることをお勧め

+0

ありがとう、@エーウィン。それは完璧に働いた。私は配列とループではあまりよくありません。そうでなければ、これを凝縮してしまいます。 – ian

+0

@an、ようこそもちろん、私たちはそれぞれゆっくりとそれぞれのことを学び始めます。あなたのプロジェクトにGoodluck! :) – Erwin

関連する問題