1
我有一個多維關聯數組,其中每個節點可以有可變數目的子節點。每個子節點將在某個點以布爾節點結束。我想要做的就是讓所有的子節點都以false結束,父節點將從數組改變爲布爾假。摺疊多維關聯數組,因此如果所有子節點都爲假,節點將轉換爲假
例輸入數組:
[
[Agronomy] => [
[blendingAnhydrous] => [
[blendingSprayOrdersDeliveryTkts] => [
[add] => true,
[create] => true,
[inquire] => true,
[delete] => true
],
[historyInquiry] => [
[add] => false,
[create] => true,
[inquire] => false,
[delete] => true
],
[listAnhydrousTicketsToBeBilled] => [
[add] => false,
[create] => false,
[inquire] => false,
[delete] => false
],
],
[main] => [
[agronomyBlendingAnhydrousEntry]: false,
[agronomyRecomendationsHistory]: false,
[agronomyReports]: false,
[agronomySetup]: false
],
],
[Grain] => [
[main] => [
[option1] => false,
[option2] => false,
[option3] => false,
]
]
]
所需的輸出數組:
[
[Agronomy] => [
[blendingAnhydrous] => [
[blendingSprayOrdersDeliveryTkts] => [
[add] => true,
[create] => true,
[inquire] => true,
[delete] => true
],
[historyInquiry] => [
[add] => false,
[create] => true,
[inquire] => false,
[delete] => true
],
[listAnhydrousTicketsToBeBilled] => false
],
[main] => false
],
[Grain] => false
]
代碼到目前爲止,我已經試過:
function collapseAuthorities(&$complexArray)
{
$keepExpanded = false;
foreach ($complexArray as $node => $value) {
if (is_array($value)) {
$this->collapseAuthorities($value);
if (!$keepExpanded) {
$value = false;
}
} elseif ($value === true) {
$keepExpanded = true;
}
}
}
我已經通過大量的做題了關於多維數組,但還沒有發現任何可以完全解決這種情況的東西。
這是更接近,但它崩潰[農學],即使它有一個真正的孩子節點。我得到了這個:'[[農學] =>錯誤,[糧食] =>虛假]'而不是上面所需的輸出。如果任何一個孩子是真的,那麼陣列節點需要保持擴展。只有當所有的孩子都是假的時候纔會崩潰 –
將它摺疊爲單個假?在[農學] =>錯誤 –
它摺疊爲'[[農學] =>假,[穀物] =>假]' –