亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

將列數據的多維數組重組為行數據的多維數組

將列數據的多維數組重組為行數據的多維數組

我具有以下列數據的關聯數組:$where = array(    'id'=>array(        12,        13,        14    ),    'date'=>array(        '1999-06-12',        '2000-03-21',        '2006-09-31'    ));我需要將結構轉置/旋轉為行數組(將合并的列數據分配給它們各自的行)。我不需要結果中的列名。預期產量:$comb = array(    array(12, '1999-06-12'),    array(13, '2000-03-21'),    array(14, '2006-09-31'));
查看完整描述

3 回答

?
不負相思意

TA貢獻1777條經驗 獲得超10個贊

解決方案1:希望這個簡單的方法foreach能夠獲得期望的結果


<?php

ini_set('display_errors', 1);

$where = array('id'=>array(12,13,14),'date'=>array('1999-06-12','2000-03-21','2006-09-31'));


$result=array();

foreach($where["id"] as $key => $value)

{

    $result[]=array($value,$where["date"][$key]);

}

解決方案2:在這里我們array_walk用來達到相同的結果


<?php

ini_set('display_errors', 1);

$result=array();

$where = array('id'=>array(12,13,14),'date'=>array('1999-06-12','2000-03-21','2006-09-31'));


array_walk($where["id"], function($value,$key) use(&$result,&$where){

    $result[]=array($value,$where["date"][$key]);

});

print_r($result);

解決方案3:在這里我們使用array_shifton $where["date"]。


<?php

ini_set('display_errors', 1);

$result=array();

$where = array('id'=>array(12,13,14),'date'=>array('1999-06-12','2000-03-21','2006-09-31'));


foreach($where["id"] as $value)

{   

    $result[]=array($value,  array_shift($where["date"]));

}

print_r($result);


查看完整回答
反對 回復 2019-11-04
?
qq_花開花謝_0

TA貢獻1835條經驗 獲得超7個贊

想看花哨的把戲嗎?

(PHP最低版本:5.6)


如果您從中剝離陣列鍵(id和date),則$where可以使用一個variadic函數并編寫一個漂亮而緊湊的小單行代碼!而且您不必費心實例化任何result數組-不必大驚小怪。PHP非常出色-忠實擁護者。


輸入:


$where=['id'=>[12,13,14],'date'=>['1999-06-12','2000-03-21','2006-09-31']];

方法#1:可變參數array_map()與func_get_args()


$comb=array_map(function(){return func_get_args();},...array_values($where));

var_export($comb);

該方法是健壯的,因為它將處理可變數量的“行”和“列”。這是一個帶有一些示例的演示。


或者,如果您的年齡低于5.6,則可以使用此方法,但它的靈活性/魯棒性較差(OP樣本數據的字面量更大):


方法2:具有兩個輸入的array_map()


$comb=array_map(function($v1,$v2){return [$v1,$v2];},$where['id'],$where['date']);

var_export($comb);

兩種方法的輸出:


array (

  0 => 

  array (

    0 => 12,

    1 => '1999-06-12',

  ),

  1 => 

  array (

    0 => 13,

    1 => '2000-03-21',

  ),

  2 => 

  array (

    0 => 14,

    1 => '2006-09-31',

  ),

)

我發現array_map()這是我最喜歡的函數,因為它在同一行中創建了結果數組(而不是像array_walk()這樣返回真/假結果;或者在完成后使用foreach循環進行打印)。這意味著您可以在不聲明結果變量的情況下進行真正的單線打印。


var_export(array_map(function(){return func_get_args();},...array_values($where)));

要么


var_export(array_map(function($v1,$v2){return [$v1,$v2];},$where['id'],$where['date']));

想看到“幻想”變成“精神幻想”嗎?

(演示)


$where = [

    'id' => [12,13,14],

    'date'=>['1999-06-12','2000-03-21','2006-09-31']

];

var_export(array_map(null, ...array_values($where)));

與上面相同的效果,只是語法更簡潔。


如果有人試圖決定要為自己的項目使用哪種解決方案,那么Alex的迭代array_column()調用將比IMO的Sahil的調用更好,因為它更加靈活/健壯(不需要對所有列名進行硬編碼),如果您的輸入數組具有變量,則可以立即展開專欄,并且總體上更具簡潔性和表現力。


為此,我的最后一個代碼片段(schmancy)也適用于可變的輸入大小,并且非常簡潔。Alex和我的之間的主要區別是null有價值的占位元素的生成。



查看完整回答
反對 回復 2019-11-04
  • 3 回答
  • 0 關注
  • 555 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號