我有一個像 $aa 這樣的關聯陣列格式。需要形成不同格式的陣列串列。
$aa = Array
(
'Std'=> Array
(
'Add/Remove/Modify',
'Create',
'Addition',
'repository',
),
'Agl' => Array
(
'Disk',
'center',
'Service ',
),
'Error' => Array
(
'VM',
'DNS',
'Upgrade',
),
'Hyg' => Array
(
'Health',
'VM ',
'Clear',
),
'Int' => Array
(
'iExecute',
'Storage',
'CMDB',
),
'Jor' => Array
(
'Uptime ',
'Server ',
'Report',
),
'Mon' => Array
(
'jobs',
'mon',
'SLA',
),
);
必須在 PHP 中形成如下格式的陣列。幫我解決這個問題。提前致謝
$res = array(
array(
'Add/Remove/Modify','Disk', 'VM','Health', 'iExecute','Uptime ', 'jobs'
),
array(
'Create','center', 'DNS', 'VM ','Storage','Server ', 'mon'
),
array(
'Addition', 'Service ', 'Upgrade', 'Clear', 'CMDB', 'Report','SLA'
),
array('repository')
);
uj5u.com熱心網友回復:
array_map()將任意數量的陣列作為引數,然后一次遍歷一個元素。每個陣列的當前元素被傳遞給一個回呼函式,該函式可以按照您希望的方式“塑造”每組值(這就是它們傳遞給回呼的方式,在這種情況下:))。
這只是一些陣列比其他陣列長的小問題(在這種情況下,傳遞給回呼的集合的大小仍然相同,但來自較短陣列的空值)。因此呼叫array_filter()。
正如您現在可能已經知道的那樣,“向后”講述這個故事,我們在擴展運算子$aa的幫助下將內容作為單獨的陣列傳遞給 array_map() 。解壓陣列 PHP 希望它是數字,但事實$aa并非如此。因此array_values()。
print_r(
array_map(
function(...$args) {
return array_filter($args);
},
...array_values($aa)
)
);
uj5u.com熱心網友回復:
array_column應該可以幫助你。如果您知道您可以在其中一個陣列中擁有的最大專案數,則無需像我在這里所做的那樣找到最大值。
$array = [
'a' => [
'1.1',
'1.2',
'1.3',
'1.4',
],
'b' => [
'2.1',
'2.2',
'2.3',
'2.4',
'2.5',
],
'c' => [
'3.1',
'3.2',
'3.3',
],
];
$max_items = 0;
foreach ($array as $sub) {
$count = count($sub);
if ($count > $max_items) {
$max_items = $count;
}
}
$new_array = [];
for ($i = 0; $i < $max_items; $i ) {
$new_array[] = array_column(array_values($array), $i);
}
var_dump($new_array);
結果
array(5) {
[0]=>
array(3) {
[0]=>
string(3) "1.1"
[1]=>
string(3) "2.1"
[2]=>
string(3) "3.1"
}
[1]=>
array(3) {
[0]=>
string(3) "1.2"
[1]=>
string(3) "2.2"
[2]=>
string(3) "3.2"
}
[2]=>
array(3) {
[0]=>
string(3) "1.3"
[1]=>
string(3) "2.3"
[2]=>
string(3) "3.3"
}
[3]=>
array(2) {
[0]=>
string(3) "1.4"
[1]=>
string(3) "2.4"
}
[4]=>
array(1) {
[0]=>
string(3) "2.5"
}
}
uj5u.com熱心網友回復:
您可以首先通過使用 max 和 array_map 來獲取內部陣列之一中的最大列數。然后你可以通過array_column獲取每個單獨的列,它也為索引使用整數鍵。
$result = [];
$maxNumberOfColumns = max(array_map('count', $aa));
for ($i = 0; $i < $maxNumberOfColumns; $i ) {
$result[] = array_column($aa, $i);
}
echo '<pre>', print_r($result, true), '</pre>';
結果:
(
[0] => Array
(
[0] => Add/Remove/Modify
[1] => Disk
[2] => VM
[3] => Health
[4] => iExecute
[5] => Uptime
[6] => jobs
)
[1] => Array
(
[0] => Create
[1] => center
[2] => DNS
[3] => VM
[4] => Storage
[5] => Server
[6] => mon
)
[2] => Array
(
[0] => Addition
[1] => Service
[2] => Upgrade
[3] => Clear
[4] => CMDB
[5] => Report
[6] => SLA
)
[3] => Array
(
[0] => repository
)
)
uj5u.com熱心網友回復:
此解決方案使用兩個回圈,第一個幫助我們確定 $res 陣列的最大長度,而第二個回圈遍歷每個值以填充 $res 子陣列。
$res = [];
$len_arr = [];
// Figure out the length of the $res array
foreach ($aa as $key => $value) {
array_push($len_arr, count($value));
}
//Populate the $res array with $len number of empty arrays
$len = max($len_arr);
$res = array_fill(0, $len, []);
//Loop through each array to populate the inner array of the $res array
foreach ($aa as $key => $value) {
for ($i = 0; $i < count($value); $i ) {
array_push($res[$i], $value[$i]);
}
}
echo '<pre>', print_r($res, true), '</pre>';
列印$res的結果如下圖:
Array
(
[0] => Array
(
[0] => Add/Remove/Modify
[1] => Disk
[2] => VM
[3] => Health
[4] => iExecute
[5] => Uptime
[6] => jobs
)
[1] => Array
(
[0] => Create
[1] => center
[2] => DNS
[3] => VM
[4] => Storage
[5] => Server
[6] => mon
)
[2] => Array
(
[0] => Addition
[1] => Service
[2] => Upgrade
[3] => Clear
[4] => CMDB
[5] => Report
[6] => SLA
)
[3] => Array
(
[0] => repository
)
)
希望這個對你有幫助。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/370007.html
上一篇:如何在numpy中迭代串列并避免TypeError:只有整數標量陣列可以轉換為標量索引
下一篇:切換問題。一些陣列沒有切換
