[英]Convert multidimensional array
如何將下面的數組轉換為下面的數組。 我正在嘗試使用array_map,但是我對如何編寫函數感到困惑。
array(3) {
["award_year"]=>
array(2) {
[0]=>
string(7) "1999-01"
[1]=>
string(7) "2010-02"
}
["award_title_user"]=>
array(2) {
[0]=>
string(1) "2"
[1]=>
string(2) "tt"
}
["award_description_user"]=>
array(2) {
[0]=>
string(1) "2"
[1]=>
string(3) "ddd"
}
}
這是我想要達到的目標:
array(2) {
[0]=>
array(3) {
["award_year"]=>
string(7) "2010-02"
["award_title_user"]=>
string(2) "tt"
["award_description_user"]=>
string(3) "ddd"
}
[1]=>
array(3) {
["award_year"]=>
string(7) "1999-01"
["award_title_user"]=>
string(1) "2"
["award_description_user"]=>
string(1) "2"
}
}
$newArr = [];
foreach($oldArr as $key=>$row) {
foreach($row as $index=>$item) {
$newArr[$index][$key] = $item;
}
}
這將解決問題,但是不會像您提到的那樣檢查數據是否有效
首先,在這種情況下,@ tzook-bar-noy的答案是一個更好的答案,我什至不提倡我在這里詳述的方法。
在處理數組時,如果可能的話,我總是盡量避免泛型循環(即: foreach()
),而是使用您在問題中提到的更具功能性的編程方法:使用諸如array_map()
類的函數。 但是,函數編程功能非常專注於它們的工作(這是它們的好處:它們使您的代碼更清潔 ),因此要使用它們:您一定要執行它們提供的特定操作。
array_map()
對於您的目的有一個缺點,因為映射的數組具有與原始數組相同的鍵,並且順序相同,因此這不是您想要的。 您都需要將原始數組“由內而外”,但是所需的結果數組的順序與原始數據相反。 不太適合array_map()
。
它可以與array_map()
,但是就像您確實需要飛利浦時使用一字螺絲刀一樣。
這是一個例子:
<?php
$awards = [
"award_year" => ["1999-01", "2010-12"],
"award_title_user" => ["2", "tt"],
"award_description_user" => ["2", "ddd"]
];
$remappedAwards = array_map(function($year, $title, $description){
return [
"award_year" => $year,
"award_title_user" => $title,
"award_description_user" => $description
];
}, $awards["award_year"], $awards["award_title_user"], $awards["award_description_user"]);
$remappedAwards = array_reverse($remappedAwards);
echo "<pre>";
var_dump($remappedAwards);
echo "</pre>";
顯然,我在這里也對鍵名進行了硬編碼,這不太理想。 可以設想一種通用方法,但是到那時,我們遠遠超出了aaray_map()
的實際意圖, aaray_map()
於代碼復雜性將變得愚蠢。
在其他語言中,這些數組迭代函數的實現要好一些(例如JS或CFML),也許可以通過.reduce()
( JS , CFML )類型的操作提出半個體面的答案。 但是,PHP的array_reduce()
(及其其他數組迭代方法)因其糟糕的實現而受阻,因為它們僅將值傳遞給回調。 他們確實確實還需要至少傳遞索引,並且(很少使用,但有時也很方便〜)將數組本身作為附加參數,以使它們不只是概念驗證。 IMO,顯然(我有偏見,我比PHP做更多的JS和CFML,所以我的期望值更高)。
底線: array_map()
不太適合您的需求,但是我為您的努力表示贊賞,因為數組操作的函數編程方法絕對比需求匹配功能的通用循環更好。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.