2017-01-05 3 views
0

余分なフラグを持つ多次元配列をソートしようとしています。配列にの名前がであり、オプションのフラグでチェックされています。この配列をで並べ替える場合は、をチェックし、次にという名前をに設定します。私は名前の部分でこれは正常に動作しているが、私はそれにチェックされたフラグを取得するように見えることはできません。レコードの余分なフラグを持つ多次元配列の並べ替え

<?php 

$data = array(
    array(
     'name' => 'C' 
    ), 
    array(
     'name' => 'A' 
    ), 
    array(
     'name' => 'E', 
     'checked' => true 
    ), 
    array(
     'name' => 'B', 
     'checked' => true 
    ), 
    array(
     'name' => 'F' 
    ), 
    array(
     'name' => 'D' 
    ) 
); 

usort($data, function($a, $b) { 
    return strcmp($a['name'], $b['name']); 
}); 

:私は、結果としてこれをしたい: B E C D F

任意の助けをいただければ幸いです。

答えて

1

function filterAndSort($array, $checked = true) { 
    $array = array_filter($array, function ($a) use ($checked) { 
     return $checked ? isset($a['checked']) : !isset($a['checked']); 
    }); 
    usort($array, function($a, $b) { 
     return strcmp($a['name'], $b['name']); 
    }); 
    return $array; 
} 

$data = array_merge(filterAndSort($data, true), filterAndSort($data, false)); 

print_r($data); 

出力:

usort($data, function($a, $b) { 

    $diff = strcmp($a['name'], $b['name']); 

    if (isset($a['checked']) && isset($b['checked'])) return $diff; 
    if (isset($a['checked'])) return -1; 
    if (isset($b['checked'])) return 1; 
    return $diff; 
}); 

属性を'checked' => falseに追加するとそれに応じてロジックを変更する必要があります。

0

スプリット二つの部分(チェックしない)、ソート別に、その結​​果をマージへの配列:あなたがチェックフラグを "優先" することができますusort

Array(
    [0] => Array(
     [name] => B 
     [checked] => 1 
    ) 
    [1] => Array(
     [name] => E 
     [checked] => 1 
    ) 
    [2] => Array(
     [name] => A 
    ) 
    [3] => Array(
     [name] => C 
    ) 
    [4] => Array(
     [name] => D 
    ) 
    [5] => Array(
     [name] => F 
    ) 
) 
関連する問題