2012-02-10 60 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 
    ) 

) 

所以我需要某种脚本这将重做第一阵列结构中的第二个

+2

到目前为止您尝试了什么? – 2012-02-10 15:10:09

+0

真的没有具体我刚刚GOOGLE了一些随机脚本,但我找不到我需要什么 – Linas 2012-02-10 15:11:00

回答

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

这应做到:

$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循环(关键始终是项相同):

$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“难看”,而条件:

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, 
    ); 
} 

第二个会破坏输入阵列,它比第一次读的有点困难,但它使河畔e不存在没有数组键的问题。