-1

active次のように、値でソートされた配列があります。

patient = Array {

    [0] = Array {
           active = Y
           priority = o
                },

    [1] = Array {
           active = Y
           priority = P
                },

    [2] = Array {
           active = Y
           priority = S
                },

    [3] = Array {
           active = Y
           priority = T
                },

    [4] = Array {
           active = N
           priority = S
                }

          }

oアクティブな要素との並べ替えを変更せずに、priority= を持つ要素を取得し、最後に追加したいと考えています。出力は次のようになります。

patient = Array {

    [1] = Array {
           active = Y
           priority = P
                },

    [2] = Array {
           active = Y
           priority = S
                },

    [3] = Array {
           active = Y
           priority = T
                },

    [0] = Array {
           active = Y
           priority = o
                },

    [4] = Array {
           active = N
           priority = S
                }

          }

キーの順序は関係ありません。

4

2 に答える 2

1

必要なものは次のとおりです。http://www.php.net/manual/en/function.uasort.php

// Comparison function
function cmp_priority($a, $b) {
    if ($a['priority'] == $b['priority']) {
        return 0;
    }
    return $a['priority'] == 'o' ? -1 : 1;
}

// Sort and print the resulting array using the comparison function
uasort($patient, 'cmp_priority');
print_r($patient);
于 2013-05-29T18:04:21.477 に答える
0

そのタスクに最適化されているため、アレイからプライオリティ キューに頼ることができます。ただし、PQ はすべてのインストールで利用できるわけではないことに注意してください。 http://php.net/manual/en/class.splpriorityqueue.php

$objPQ = new SplPriorityQueue();
$objPQ->insert('A',3); 
$objPQ->insert('B',6); 
$objPQ->insert('C',1); 
$objPQ->insert('D',2); 

//mode of extraction 
$objPQ->setExtractFlags(PQtest::EXTR_BOTH); 

//Go to TOP 
$objPQ->top(); 

while($objPQ->valid()){ 
    print_r($objPQ->current()); 
    echo "<BR>"; 
    $objPQ->next(); 
}
于 2013-05-29T18:18:16.547 に答える