2013-12-19 2 views
0

У меня есть 2-мерная массив с 30 + узлами позиций в следующем формате.Рандомизированный массив miltidimentional

$catalog= array(
    array(
     code => "ABC", 
     name => "Item name", 
     link => "domain.com/item121" 
    ), 
    array(
     code => "DEF", 
     name => "Another item name", 
     link => "domainB.com/item333" 
    ) 
); 

мне нужно сделать следующее:

  1. рандомизировать массиву
  2. Показать первые 5 элементов в строке
  3. Показать остальное внутри другой контейнер 5 штук в ряд.

Я хочу показать только полные строки из 5 и без партиций. Поэтому я считаю общие элементы:

$items= count($catalog); 

Тогда я сосчитать, сколько для отображения иметь полные строки 5:

$showItems = floor($logosN/5) * 5; // num or rows * cnt per row 

Я не знаю, как сделать все остальное. Я могу выводить элементы без случайной статистики

echo '<div class="first5">'; 
    // 5 first items here 
echo '</div>'; 

echo '<div class="restItems">'; 
// rest items need to go here 

for ($x = 0; $x <= $showItems - 1; $x++) { 
    echo ' 
    <div class="item"> 
     <div class="item_'.$catalog[$x][code].'"></div> 
    </div>'; 
} 

echo '</div>'; 

Нужна помощь здесь. Благодарю.

+2

Если вы в состоянии сделать это без случайной выборки, просто вызовите 'array_shuffle()' и используйте ту же процедуру. – Barmar

ответ

0

Я посмотрел на примеры, размещенные пользователями на PHP документации для shuffle и нашел эту функцию, которая , если я правильно понимаю ваш вопрос делает то, что вы хотите:

Ссылка: http://www.php.net/manual/en/function.shuffle.php#93214

<?php 
function twodshuffle($array) 
{ 
    // Get array length 
    $count = count($array); 
    // Create a range of indicies 
    $indi = range(0,$count-1); 
    // Randomize indicies array 
    shuffle($indi); 
    // Initialize new array 
    $newarray = array($count); 
    // Holds current index 
    $i = 0; 
    // Shuffle multidimensional array 
    foreach ($indi as $index) 
    { 
     $newarray[$i] = $array[$index]; 
     $i++; 
    } 
    return $newarray; 
} 
?> 

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

Смежные вопросы