0

私はここの初心者です。PHPのソートについて質問があります。いろいろ検索しましたが、残念ながら探していたものに対する解決策を見つけることができませんでした。簡単なのはわかっていますが、何時間も検索しても見つからなかった理由がわかりません。

私はこのような配列を持っています。それらにはキー「duty」があります。新しい配列に「duty」フィールドの順序で配列が含まれるように、これに対して何らかの並べ替えを行いたいと考えています。

$arrayName = array(
array(
    'name' => 'Dr. Hugo Lopez',
    'duty' => 'Anesthesiologist',
    'link' => ''
),
array(
    'name' => 'Dr. Dario Garin',
    'duty' => 'Orthopedic Specialist',
    'link' => 'dr-dario-garin.php'
),
array(
    'name' => 'Dr. Maclovio Yañez',
    'duty' => 'Plastic Surgeon',
    'link' => ''
),
array(
    'name' => 'Melissa Bracker',
    'duty' => 'Patient Liaison',
    'link' => ''
),
array(
    'name' => 'Dr. Diego Guzman',
    'duty' => 'Cardiologist',
    'link' => ''
),
array(
    'name' => 'Ivan Arafat',
    'duty' => 'Accountant',
    'link' => ''
),
array(
    'img-old' => 'jorge-fernandez.jpg',
    'duty' => 'Hospital Administrator',
    'link' => ''
),
);

私は試した:

usort($arrayName, function($a, $b) {
return $a['duty'] - $b['duty'];
});

ただし、これは配列を Duty フィールドの降順で並べ替えます。

役職優先で順番に並べたい。Like : 職務フィールド値の順序を設定して、Nurse、Maintenance、Doctor、Driver などのカテゴリに配置します。

できるようにしたい-ある種の配列を使用して、自分で分類の順序を設定します。

sort($arrayName, $priority);
$priority = array( 'President', 'Vice President', 'Doctors', 'Nurse', 'Maintenance', 'Drivers');

私はPHPにあまり詳しくありません。基本的な質問でしたらすみません。

4

4 に答える 4

0

これが私の解決策であり、最も効率的ではありませんが、うまくいくはずであり、優先事項として定義されていない義務の問題を説明する必要があります。

$priority = array('Orthopedic Specialist', 'Hospital Administrator', 'Accountant', 'Anesthesiologist', 'Plastic Surgeon');

function dutySort(array &$array, array $priority) {

    usort($array, function($a, $b) use ($priority) {
        $aPriority = array_search($a['duty'], $priority);
        $aPriority = ($aPriority !== false ? $aPriority : count($priority));
        $bPriority = array_search($b['duty'], $priority);
        $bPriority = ($bPriority !== false ? $bPriority : count($priority));

        return ($aPriority < $bPriority) ? -1 : 1;
    });
}

dutySort($array, $priority);
于 2013-04-23T02:51:49.670 に答える