簡體   English   中英

重新索引並排序多維 PHP 數組

[英]Re index and sort a multidimensional PHP array

我正在嘗試重新索引和排序多維 PHP 數組,請記住,如果 arrays 內部的一些沒有特定索引而其他有,我們只想跳到該特定內部數組中的下一個索引

例如,下面的源數組在 subject_1 和 subject_3 中沒有數組索引 4,但在 subject_2 中有它

            Array
            (
            [subject_1] => Array
            (
            [2] => a
            [6] => b
            )

            [subject_2] => Array
            (
            [2] => c
            [4] => d
            [6] => e
            )

            [subject_3] => Array
            (
            [2] => f
            [6] => g
            )
            )

所以,預期的結果數組應該類似於下面

            Array
            (
            [subject_1] => Array
            (
            [0] => a
            [2] => b
            )       
            [subject_2] => Array
            (
            [0] => c
            [1] => d
            [2] => e
            )

            [subject_3] => Array
            (
            [0] => f
            [2] => g
            )
            )
            )
            )

下面代碼的問題是它在排序之前知道索引是否存在於所有子 arrays

            $all_incoming_keys = array();
            foreach($p2 as $key => $value){
            $all_incoming_keys[] = $key;
            }
            for($sp2 = 0; $sp2 < count($p2); $sp2++){
            sort($p2[$all_incoming_keys[$sp2]]);
            array_values($p2[$all_incoming_keys[$sp2]]);
            } 

這段代碼是針對這種情況的正確方法,還是我缺少 function

為了能夠根據 position 是唯一鍵列表重新索引鍵,您首先需要確定此順序。 此代碼遍歷所有主題並將所有鍵合並到 1 個數組( $all_incoming_keys )中。 然后對其進行處理以創建唯一的鍵列表(按數字順序)並創建一個具有關聯 position 的列表。

$all_incoming_keys = [];
// Extract all of the keys
foreach ( $a as $subjects ) {
    $all_incoming_keys = array_merge ($all_incoming_keys, array_keys($subjects));
}
sort($all_incoming_keys);
// Create sequential list of different values
$all_incoming_keys = array_flip(array_values(array_unique($all_incoming_keys)));
print_r($all_incoming_keys);

這給...

Array
(
    [2] => 0
    [4] => 1
    [6] => 2
)

然后第二部分再次通過主題並將每個項目的值復制到一個新數組中,其中包含上述列表中的鍵......

$newA = [];
foreach ( $a as $subjectName => $subjects ) {
    foreach ( $subjects as $key => $subject ){
        $newA[$subjectName][$all_incoming_keys[$key]] = $subject;
    }
}

print_r($newA);

在您的示例中,應該給出...

Array
(
    [subject_1] => Array
        (
            [0] => a
            [2] => b
        )

    [subject_2] => Array
        (
            [0] => c
            [1] => d
            [2] => e
        )

    [subject_3] => Array
        (
            [0] => f
            [2] => g
        )

)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM