Мне нужно перетасовать часть ассоциативного массива. Пример массива приведен ниже. Правила: случайное перемешивание должно происходить на одних и тех же клавишах (ad-pre, ad-mid, ad-end). Порядок ключей всегда такой (ad-pre, ad-mid, ad-end), однако массив может не всегда содержать все ключи (например, может не быть ключей ad-pre). Так, например, возьмите все элементы массива с ключами 'ad-pre', перемешайте их и верните в тот же начальный, конечный индекс.
Я закончил с этим кодом, но он грязный, и я ищу более чистый путь. Кроме того, next_key может не существовать!
<code>$data = array(
array(
"ad_type"=> "ad-pre",
"type"=> "a1"
),
array(
"ad_type"=> "ad-pre",
"type"=> "a2"
),
array(
"ad_type"=> "ad-mid",
"type"=> "b1"
),
array(
"ad_type"=> "ad-mid",
"type"=> "b2"
),
array(
"ad_type"=> "ad-mid",
"type"=> "b3"
),
array(
"ad_type"=> "ad-end",
"type"=> "c1"
)
);
echo '<pre>';
var_dump($data);
echo '
'; $ sub = array (); $ index = 0; $ len = 0; $ Старт; $ key = 'ad-mid'; $ next_key = 'ad-end'; foreach ($ data as $ row) {if ($ row ['ad_type'] == $ key) {if (! isset ($ start)) $ start = $ index; $ Len ++; } else if ($ row ['ad_type'] == $ next_key) {// Я хочу разбить следующий ключ (поэтому он не l oop весь массив), но это не хорошо, потому что этот ключ может не существовать! перемена; } $ index ++; } var_dump ($ start, $ len); $ sub = array_splice ($ data, $ start, $ len); перетасовать ($ суб); array_splice ($ data, $ start, 0, $ sub); echo '
';
var_dump($data);
echo '
';