Извлечь первые 3 элемента массива — & gt; Перемешать это — & gt; и добавить их обратно в оригинал. массив

Можно ли «извлечь» первые 3 элемента массива, затем перемешать эти 3 элемента и добавить их обратно в массив?

Это слайдер, и первые 3 слайда должны отображаться случайным образом при каждой загрузке страницы …

Может ли кто-нибудь помочь?

 public function shuffle( $data ) {

// Return early there are no items to shuffle.
if ( ! is_array( $data['slider'] ) ) {
return $data;
}

// Prepare variables.
$random = array();
$keys   = array_keys( $data['slider'] );

// Shuffle the keys and loop through them to create a new, randomized array of images.
shuffle( $keys );
foreach ( $keys as $key ) {
$random[$key] = $data['slider'][$key];
}

// Return the randomized image array.
$data['slider'] = $random;
return $data;

}

/* ———————— ОБНОВИТЬ ———————— * /

Вот как это работает для меня, но почему? Я относительно новичок в php; D

public function shuffle($data) {

// Return early there are no items to shuffle.
if (!is_array($data['slider'])) {
return $data;
}

$sliced_array = array_slice($data["slider"], 0, 3, TRUE);
// Shuffle the keys and loop through them to create a new, randomized array of images.
shuffle($sliced_array);


$data['slider'] = $sliced_array + array_slice($data["slider"], 0);

return $data;
}

0

Решение

Да, это возможно. Вы были на правильном пути. С несколькими настройками это сработало хорошо.

Код:

public function shuffling($data) {

// Return early there are no items to shuffle.
if (!is_array($data['slider'])) {
return $data;
}

$sliced_array = array_slice($data["slider"], 0, 3, TRUE);
// Shuffle the keys and loop through them to create a new, randomized array of images.
shuffle($sliced_array);

foreach ($sliced_array as $key => $value) {
$data['slider'][$key] = $value;
}
return $data;
}

Я пробовал с образцом массива, как:

shuffling(["slider" => [
0 => "A",
1 => "B",
2 => "C",
3 => "D",
4 => "E",
]]);

И результат:

Array
(
[slider] => Array
(
[0] => B
[1] => C
[2] => A
[3] => D
[4] => E
)

)

Замечания: shuffle это уже функция, определенная в php. Вот почему я изменил имя на shuffling,

0

Другие решения

<?php
$data = [1,2,3,4,5,6,7,8,9];

//get 3 first elements and remove 3 first elements from main array
$remains = array_splice($data,3);

//shuffle 3 elements
shuffle($data);

//join everything back
$data = array_merge(array_values($data), array_values($remains));
0

Вот демо: https://3v4l.org/rYfV2

public function shuffler($data) {

// Return early there are no items to shuffle.
if (!is_array($data['slider'])) {
return $data;
}

// Generate a copy of first three elements.
$first = array_slice($data['slider'], 0, 3);

// Shuffle first three elements.
shuffle($first);

// Overwrite original first three elements.
$data['slider'] = array_replace($data['slider'], $first);
// $data['slider'] = $first + $data['slider'];  // function-less alternative

// Return the randomized image array.
return $data;

}

array_replace() избегает делать процесс замены более многословным / итеративным способом. Это также позволяет избежать обработки всего массива, когда вы хотите обрабатывать только первые три элемента. Ни в коем случае не нужно звонить array_values(),

Вы также можете использовать оператор объединения вместо array_replace() — см. мою закомментированную строку кода под array_replace() линия. (демонстрация)

От PHP Документация Массив Оператор:

Оператор + возвращает правый массив, добавленный к левому
массив; для ключей, которые существуют в обоих массивах, элементы из
будет использоваться левый массив, а соответствующие элементы из
правый массив будет игнорироваться.

0
По вопросам рекламы [email protected]