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

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有價值的占位元素的生成。
添加回答
舉報