在php中以某种格式排列多维数组

时间:2018-01-22 17:52:16

标签: php arrays multidimensional-array

我有一个以下格式的数组

Array
(
    [title] => Array
        (
            [0] => Ram 
            [1] => ramesh
            [2] => john
            [3] => mahesh

        )

    [neighborhood] => Array
        (
            [0] => delhi
            [1] => mumbai
            [2] => odisha
            [3] => banglore

        )



    [phone_no] => Array
        (
            [0] =>  9438648-4256
            [1] => 9438333-3390
            [2] => 9438771-0888
            [3] => 9438504-7000

        )
)

但我希望采用以下格式

Array
(
    [0] => Array
        (
            [title] => Ram 
            [neighborhood] => delhi
            [phone_no] =>  9438648-4256

        )

        [1] => Array
        (
            [title] => Ramesh 
            [neighborhood] => mumbai
            [phone_no] => 9438333-3390 

        )


        [2] => Array
        (
            [title] => john 
            [neighborhood] => odisha
            [phone_no] =>  9438771-0888

        )

        [3] => Array
        (
            [title] => mahesh 
            [neighborhood] => banglore
            [phone_no] => 9438504-7000

        )
}

我想在php中使用上述格式的数组。非常感谢帮助。 提前致谢

2 个答案:

答案 0 :(得分:1)

  $arr = array(
    "title" => array("t1","t2","t3","t4"),
    "neighborhood" => array("n1","n2","n3","n4"),
    "phone_no" => array("p1","p2","p3","p4"),

);

$keys = array_keys($arr);
$child_len = count($arr[ $keys[0] ]);

$returnArr = array();

for ($i=0; $i < $child_len; $i++) { 
    $returnArr[$i] = array();
    foreach ($keys as $key) {
        $returnArr[$i][$key] = $arr[$key][$i];
    }

}
var_dump($returnArr);

不是最有效的,但会对你有用

out就像

[0]=>
  array(3) {
    ["title"]=>
    string(2) "t1"
    ["neighborhood"]=>
    string(2) "n1"
    ["phone_no"]=>
    string(2) "p1"
  }
  [1]=>
  array(3) {
    ["title"]=>
    string(2) "t2"
    ["neighborhood"]=>
    string(2) "n2"
    ["phone_no"]=>
    string(2) "p2"
  }
  [2]=>
  array(3) {
    ["title"]=>
    string(2) "t3"
    ["neighborhood"]=>
    string(2) "n3"
    ["phone_no"]=>
    string(2) "p3"
  }
  [3]=>
  array(3) {
    ["title"]=>
    string(2) "t4"
    ["neighborhood"]=>
    string(2) "n4"
    ["phone_no"]=>
    string(2) "p4"
  }

答案 1 :(得分:0)

array_combine()array_column()为此任务制作明确的代码。 for循环将迭代多维数组中的每一列。然后使用array_combine()简单地将数组键与列值配对。

代码:(Demo

$array=[
    'title'=>['Ram','ramesh','john','mahesh'],
    'neighborhood'=>['delhi','mumbai','odisha','banglore'],
    'phone_no'=>['9438648-4256','9438333-3390','9438771-0888','9438504-7000']
];

$keys=array_keys($array);  // cache the array keys
$columns=sizeof($array['title']); // cache the number of columns to iterate
for($c=0; $c<$columns; ++$c){
    $result[]=array_combine($keys,array_column($array,$c));
}

var_export($result);

输出:

array (
  0 => 
  array (
    'title' => 'Ram',
    'neighborhood' => 'delhi',
    'phone_no' => '9438648-4256',
  ),
  1 => 
  array (
    'title' => 'ramesh',
    'neighborhood' => 'mumbai',
    'phone_no' => '9438333-3390',
  ),
  2 => 
  array (
    'title' => 'john',
    'neighborhood' => 'odisha',
    'phone_no' => '9438771-0888',
  ),
  3 => 
  array (
    'title' => 'mahesh',
    'neighborhood' => 'banglore',
    'phone_no' => '9438504-7000',
  ),
)

或者,你可以像这样使用foreach循环:

$keys=array_keys($array);  // cache the array keys
foreach($array['title'] as $i=>$v){
    $result[]=array_combine($keys,array_column($array,$i));
}

$v已声明但未使用,因此可以声明$i