Цикл по массиву PHP с предпочтением, чтобы сделать цикл первым - PullRequest
0 голосов
/ 16 февраля 2019

У меня есть простой массив $arr с ключами, которые начинаются с ab- или xy- в разных порядках.Я хочу сначала прокрутить ключи с помощью ab-, и они xy-.

$arr = [
    'ab-283' => 'Hi', // 1 (loop through this first)
    'xy-153' => 'Ok', // 5
    'ab-232' => 'Hello', // 2 (loop this through second...)
    'ab-164' => 'Cool', // 3
    'xy-164' => 'Hmm', // 6
    'ab-164' => 'Yo', // 4
    'xy-164' => 'Yup' // 7
];

foreach ($arr as key => $value) {
}

Вот что будет выводом:

Hi
Hello
Cool
Yo
Ok
Hmm
Yup

Так есть ли в любом случае циклсначала ab-, а затем xy-?Спасибо

Ответы [ 2 ]

0 голосов
/ 16 февраля 2019

Вы можете сначала отсортировать массив $ arr по ключу.

ksort($arr);

, а затем foreach.Ваш массив имеет одни и те же ключи несколько раз (xy-164), поэтому выходные данные будут не такими, как вы, но скорее:

array(5) {
  ["ab-164"]=>
  string(2) "Yo"
  ["ab-232"]=>
  string(5) "Hello"
  ["ab-283"]=>
  string(2) "Hi"
  ["xy-153"]=>
  string(2) "Ok"
  ["xy-164"]=>
  string(3) "Yup"
}
0 голосов
/ 16 февраля 2019

Если вы не хотите, чтобы он был полностью отсортирован по ключу (я полагаю, вы этого не сделаете, поскольку в выводе, который вы показали, это не так), я думаю, вам просто придется пройти его дважды.

foreach (['ab', 'xy'] as $prefix) {
    foreach ($arr as $key => $value) {
        if (substr($key, 0, 2) == $prefix) {
            echo $value;
        }
    }
}
...