2012-02-10 11 views
-1

私は私の配列に問題がbasiclyこれは私が持っているものであることだ。多次元配列を再構築する方法は?

$test = 
array(
    "image" => array(
     "name" => array(
      "name.jpg", 
      "name2.jpg", 
      "name3.jpg" 
     ), 
     "type" => array(
       "image/jpeg", 
       "image/jpeg", 
       "image/jpeg", 
     ), 
     "size" => array(
      118108, 
      589788, 
      1387074 
     ) 
    ) 
) 

そして、これは私が持っているしたいものです。

$test2 = 
array(
    "0" => array(
     "name" => "name.jpg", 
     "type" => "image/jpeg", 
     "size" => 118108 
    ), 
    "1" => array(
     "name" => "name2.jpg", 
     "type" => "image/jpeg", 
     "size" => 589788 
    ), 
    "2" => array(
     "name" => "name3.jpg", 
     "type" => "image/jpeg", 
     "size" => 1387074 
    ) 

) 

だから私は希望のスクリプトのいくつかの種類を必要とします私は、これはそれをしないと思う1

+2

これまでに何を試みましたか? –

+0

実際には特定のものは何も私はちょうどランダムなスクリプトをグーグルしているが、私は必要なものを見つけることができません – Linas

答えて

2

もっと一般的な解決法があります。任意のプロパティ名を持つ配列を再構築します。私はまた、使いやすくするために関数にラップしました。

使用:

function func(array $input) 
{ 
    $result = array(); 

    foreach ($input as $type => $properties) { 
     foreach ($properties as $name => $values) { 
      for ($i = 0; $i < count($values); $i++) { 
       $result[$i][$name] = $values[$i]; 
      } 
     } 
    } 

    return $result; 
} 

結果で:

Array 
(
    [0] => Array 
     (
      [name] => name.jpg 
      [type] => image/jpeg 
      [size] => 118108 
     ) 

    [1] => Array 
     (
      [name] => name2.jpg 
      [type] => image/jpeg 
      [size] => 589788 
     ) 

    [2] => Array 
     (
      [name] => name3.jpg 
      [type] => image/jpeg 
      [size] => 1387074 
     ) 

) 

はそれが役に立てば幸い!

1

秒にして、最初の配列構造をやり直す:

<?php 

$result = array(); 

foreach($test['image'] as $key=>$data){ 
foreach($data as $id=>$val){ 
    $result[$id][$key] = $val; 
} 
} 

?> 
1

は、これはそれを行う必要があります。

$output = array(); 
foreach($test["image"]["name"] as $key => $name){ 
    $output[] = array(
    'name' => $name, 
    'type' => $test["image"]["type"][$key], 
    'size' => $test["image"]["size"][$key], 
); 
} 

または「中array_shift/array_popを使用します。

$test = 
array(
    "image" => array(
     "name" => array(
      "name.jpg", 
      "name2.jpg", 
      "name3.jpg" 
     ), 
     "type" => array(
       "image/jpeg", 
       "image/jpeg", 
       "image/jpeg", 
     ), 
     "size" => array(
      118108, 
      589788, 
      1387074 
     ) 
    ) 
); 

$output=array(); 

foreach(range(0,(count($test["image"])-1)) as $i) 
{ 
    $output[$i]=array($test["image"]["name"][$i],$test["image"]["type"][$i],$test["image"]["size"][$i]); 
} 

var_dump($output); 
1

PHP構文は、例のforeachループのためにこれを行うには、いくつかの方法は、(キーはアイテムのために常に同じです)を許可します条件を満たしていない状態:

while(
    ($name = array_pop($test["image"]["name"])) && 
    ($type = array_pop($test["image"]["type"])) && 
    ($size = array_pop($test["image"]["size"])) 
) { 
    $output[] = array(
     'name' => $name, 
     'type' => $type, 
     'size' => $size, 
    ); 
} 

2番目のものは入力配列を破壊し、最初のものよりも読みにくいですが、既存の配列キーに問題はありません。