について話していた内容array_filter()
です。
<?php
$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?';
function drop_word($word)
{
$drop_percent = 20; # I want there to be a 20% chance that I drop the word.
if(rand(0,99) < $drop_percent)
{
printf("Dropping %s\n", $word);
return false; # Drop the word by returning false
}
else
{
return true; # Keep the word by returning true
}
}
$word_array = explode(" ", $content);
shuffle($word_array); # $word_array is now shuffled
printf('$word_array has %d elements.'."\n", count($word_array));
$filtered_word_array = array_filter($word_array, "drop_word");
printf('$filtered_word_array has %d elements.'."\n", count($filtered_word_array));
$filtered_content = implode(" ", $word_array);
echo "\n";
echo "New paragraph:\n";
echo $filtered_content;
/*
== OUTPUT ==
$word_array has 199 elements.
Dropping exercitation
Dropping dolore
Dropping molestiae
Dropping sint
Dropping enim
Dropping dolorem
Dropping est,
Dropping ipsum
Dropping laboris
Dropping eu
Dropping aut
Dropping ipsa
Dropping consequatur,
Dropping nisi
Dropping cupidatat
Dropping aut
Dropping Nemo
Dropping fugiat
Dropping amet,
Dropping enim
Dropping proident,
Dropping ut
Dropping labore
Dropping irure
Dropping fugiat
Dropping magni
Dropping consequat.
Dropping quia
Dropping fugit,
Dropping voluptatem
Dropping ea
Dropping Ut
Dropping Neque
Dropping anim
Dropping sed
Dropping laborum.
Dropping in
Dropping exercitationem
$filtered_word_array has 161 elements.
New paragraph:
aperiam, adipisci deserunt eiusmod veniam, voluptas dolor tempora exercitation mollit adipisicing numquam est voluptatem. sit Duis porro sit nulla voluptatem ab dolore molestiae sint beatae tempor natus totam enim quisquam dolorem laboriosam, dicta est, in ipsum qui laboris unde id sed incidunt ea reprehenderit quae nihil autem accusantium nesciunt. vel ea quaerat qui ut ex ratione sequi Lorem pariatur? suscipit eu enim Ut quo aut dolor ut sit pariatur. aspernatur quasi commodo ut ipsa consequatur, ipsam aute quia quia qui sunt elit, nisi sed cupidatat iste aliquid esse nisi labore consectetur, iure modi esse velit et doloremque ad quia aut velit, ipsum consequuntur Quis ut eum Nemo nulla eum illo cillum ullamco fugiat ullam dolore qui minima in voluptas amet, rem Excepteur enim proident, quam ad et qui consectetur ex dolore ut dolores quis eius velit aliqua. magna reprehenderit nostrud occaecat labore inventore in eos irure aliquam sit architecto fugiat magni consequat. incididunt quia fugit, illum aliquip corporis Sed voluptatem sunt eaque non error omnis ea Ut vel Neque culpa voluptate dolorem minim anim do nostrum odit sed veniam, perspiciatis laborum. amet, veritatis non explicabo. voluptate officia dolor quis consequatur? voluptatem commodi et in
vitae exercitationem magnam laudantium,
*/
drop_word()
わかりやすくするために、コールバック関数は省略しました。また、printf()
何が起こっているのかを示すために、いくつかのステートメントを挿入しました。実際にこのようなことをする場合は、それらを削除する必要があります。
また、これは少し簡単な別の方法です。
<?php
$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?';
$drop_percent = 0.2; # A decimal number representing the percentage of words you want to drop
# 0.2 = 20% (Must be between 0.0 and 1.0)
$word_array = explode(" ", $content);
shuffle($word_array); # $word_array is now shuffled
printf('$word_array has %d elements.'."\n", count($word_array));
$filtered_word_array = array_slice($word_array, 0, count($word_array) * (1-$drop_percent));
printf('$filtered_word_array has %d elements.'."\n", count($filtered_word_array));
$filtered_content = implode(" ", $word_array);
echo "\n";
echo "New paragraph:\n";
echo $filtered_content;
/*
== OUTPUT ==
$word_array has 199 elements.
$filtered_word_array has 159 elements.
New paragraph:
et ratione exercitationem eaque consequatur, labore ea ea fugiat ullamco illum ab numquam quia ut eum voluptatem. nulla consequatur? vitae qui non nesciunt. ipsum ad incidunt voluptatem inventore enim consequat. in incididunt voluptatem eos ipsam minima laboris Nemo ut quia quia in sit quam sunt est cillum ea reprehenderit dolor aspernatur voluptas in aut sit nisi adipisci et nostrum anim dolore perspiciatis magni doloremque qui laudantium, labore id amet, eius voluptas Lorem officia esse autem tempora ex omnis do dolore consectetur, iste Ut laborum. laboriosam, natus aliquid dolor amet, velit sed nihil sit cupidatat non porro minim vel sequi adipisicing aut quo quae dolorem irure enim culpa ut quaerat est, qui nulla ullam veniam, sed quasi consequuntur in veniam, occaecat molestiae fugiat quia qui iure veritatis architecto ad voluptate magna suscipit voluptate et vel accusantium modi dolorem pariatur. ex aliquip explicabo. tempor quis beatae velit commodo magnam sit aliquam sint illo error unde aliqua. dolor nisi sunt eum Ut consectetur
aperiam, qui Quis exercitation aute voluptatem eu odit nostrud sed elit, Neque corporis eiusmod ut quisquam esse ut ipsum quis ipsa pariatur? Excepteur velit, dolores reprehenderit deserunt Duis rem proident, totam Sed dicta enim commodi fugit, mollit dolore
*/
2 つの主な違いは、前者では各単語が 20% の確率でドロップされるため、実行するたびに異なる長さの出力配列になる可能性があることです。単語が削除されない可能性があります (可能性は低いですが)。
2 番目では、単語の 20% が削除されます。これは確かです。どの 20% かはランダムなシャッフルに依存しますが、20% は常にドロップされるため、毎回同じ長さの出力配列になります。