2015-04-10 5 views
1

У меня есть два массива, один используются сделать отображение изображений и другой для объявления:Вводить второй массив случайным образом внутри первой

$ads = Array 
(
    [0] => stdClass Object 
     (
      [description] => Long Ad 
     ) 

    [1] => stdClass Object 
     (
      [description] => Tower Ad 
     ) 

    [2] => stdClass Object 
     (
      [description] => Small Ad 
     ) 

) 

$images = Array 
(
    [0] => stdClass Object 
     (
      [title] => My House 
     ) 

    [1] => stdClass Object 
     (
      [title] => Forest Panorama 
     ) 

    [2] => stdClass Object 
     (
      [title] => Dog Picture 
     ) 

    [3] => stdClass Object 
     (
      [title] => Sunset 
     ) 

    [4] => stdClass Object 
     (
      [title] => Sunrise 
     ) 

) 

Я попытался, используя следующий код:

foreach ($images as $i=> $row) { 
    $offset = array_rand($images); 
    array_splice($images, $offset, 0, $ads); 
    print $row->description . "<br>"; 

} 

В выше я получаю только три записи вместо 8. Я хотел бы вставить $ ads массив внутри цикла случайным образом. Массив $ images должен оставаться неизменным, а массив $ ads вводится в случайных местах.

+3

'$ mergedArray = array_merge ($ images, $ ads); shuffle ($ mergedArray); ' –

+0

Итак, вы просто хотите рандомизировать массив' $ ads', а затем объединить его вместе с массивом '$ images', правильно? – Rizier123

+0

Попробуйте: shuffle ($ ads); \t \t print_r (array_merge ($ images, $ ads)); 'Это делает трюк для вас? Или вы также хотите, чтобы элементы из '$ ads' также находились между элементами' $ images'? – Rizier123

ответ

1

Итак, наконец, я думаю, что это то, что вы хотите, и он должен работать для вас:

<?php 

    $tmp = $ads; 

    foreach($images as $v) { 
     if(rand(1, 100) >= 40) { //To 60%(100-40) percent an ads element gets injected 
      $key = array_rand($tmp, 1); 
      $v->description = $ads[$key]->description; 
      unset($tmp[$key]); 
     } 
    } 

?> 

Чтобы отобразить использование данных:

foreach($images as $image) { 
    echo "image: " . $image->title . (isset($image->description)?(" | description: " . $image->description . "<br>"):"<br>"); 
} 

пример вывода:

image: Dog picture | description: Small Ad 
image: Sunset 
image: Sunrise | description: Long Ad 
+0

Я получаю несколько ошибок «Предупреждение: array_rand(): Второй аргумент должен быть между 1 и числом элементов в массиве2» – Alko

+0

@Alko. Ваш массив '$ ads' меньше массива' $ images'? Опубликуйте как pastebin, как вы используете мой код в своем скрипте. Код работает отлично для меня: http://3v4l.org/cb44r – Rizier123

+0

Да, массив объявлений меньше изображений, и я использую его точно так же, как и вы, но ошибка возникает случайно, не все время , – Alko

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