Я хотел сделать очень быструю функцию для создания случайного абзаца.Php Array explode, implode, shuffle
Так что я думал, что лучший способ - взять существующий, взорваться, перетасовать и взорвать.
$content = 'Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation .';
$content = explode(" ", $content);
shuffle ($content);
$content = implode(" ", $content);
Это работает, но он произвел 2 вопроса в моем сознании.
1 - почему это не работает:?
$content = explode(" ", $content);
$content = shuffle ($content);
$content = implode(" ", $content);
и это делает работу:
$content = explode(" ", $content);
shuffle ($content);
$content = implode(" ", $content);
2 - как случайным образом определить количество слов, чтобы выпасть из массива
(для того, чтобы создать случайную длину/количество слов ?)
** UPDATE I **
Прежде всего, спасибо всем комментарии swers!
Я закончил с этим:
$content = 'Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit qui in ea voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla pariatur?
';
$rand_y = rand(1, 5);// rand number for the loop
for ($b=1; $b<=$rand_y; $b++) { // repeat random times (to create paragraphes)
$content = explode(' ', $content);
$count = count($content) ; // word count - otherwise can return error
$rand_x = rand(40,$count); // min 20 words , max = word count in paragraph
$rnd = array_rand($content, $rand_x); // answer from @bsdnoobz
$content = implode(' ', array_intersect_key($content, array_flip($rnd)));
}
1- я добавил счетчик(), потому что без него я мог получить ошибку, если число рандов больше, чем количество слов.
«Второй аргумент должен быть между 1 и числом элементов в массиве»
(на самом деле это странно, что PHP не automtically игнорировать такую ошибку. - но фигу)
2- Я не нашел простой способ добавить разделитель абзацев (возврат карри или новую строку), чтобы создать более одного. поэтому я использовал простой «для». оказывается, что добавление возврата карри в пределах $ content $ само по себе будет работать! (! Я хотел бы знать, почему, я думаю, что в настоящее время рассматривается как часть массива)
Во всяком случае - я знаю, что это примитивный способ, а не то, что многие PHP гуру выбрал бы, - но я узнал много, и это самое главное - спасибо всем!
'shuffle()' возвращает логическое значение, основанное на успешности тасования. Итак, в первом примере '$ content' больше не является массивом после строки 2. – jedwards
Если вы хотите использовать другой подход, взгляните на это. http://stackoverflow.com/questions/2695981/php-get-random-paragraph –
И для # 2 я бы, вероятно, определил функцию, которая возвращает логическое значение, возвращая true с тем же распределением, которое я хотел бы передать словами " оставаться". Затем используйте 'array_filter()', указав мою функцию как параметр обратного вызова. – jedwards