Symfony:随机排列数组
Symfony : Shuffle an array
我试图将一个目录中的所有图像放入一个数组中,然后对其进行洗牌,然后在 Symfony 的视图中显示它。
例如:
/images/theme/404/01.gif
/images/theme/404/02.gif
/images/theme/404/03.gif
是图片,但我不知道有多少张图片。我尝试随机播放这些图像以在之后显示它。
我这样做了:
控制器
public function showAction()
{
$dir = $this->get('kernel')->getRootDir() . '/../web/images/theme/404/';
$dh = opendir($dir);
$errorFiles = array();
$errorFilesShuffled = shuffle($errorFiles);
while (false !== ($filename = readdir($dh)))
if ($filename != '.' && $filename != '..' && $filename[0] != '.')
$errorFilesShuffled[] = $filename;
return $this->render('errors/show.html.twig', [
'gifs' => $errorFilesShuffled
]);
}
查看
{% for image in gifs %}
<div class="clearfix mosaicflow">
<div class="mosaicflow__item">
<img src="{{ asset('/images/theme/404/'~image) }}" />
</div>
</div>
{% endfor %}
我收到此错误错误:Warning: Cannot use a scalar value as an array
编辑
有了这个控制器,我再也没有错误了。
控制器
public function showAction()
{
$dir = $this->get('kernel')->getRootDir() . '/../web/images/theme/404/';
$dh = opendir($dir);
$errorFiles = array();
while (false !== ($filename = readdir($dh)))
if ($filename != '.' && $filename != '..' && $filename[0] != '.')
$errorFiles[] = $filename;
$errorFilesShuffled = shuffle($errorFiles);
return $this->render('errors/show.html.twig', [
'gifs' => $errorFilesShuffled
]);
}
但是我还有一个问题,我在页面上看不到图片。当我检查 HTML 时,div <div class="clearfix mosaicflow">
甚至不在这里。
如果您查看函数 shuffle() 的定义,您会注意到数组将按引用给出,函数将 return 一个布尔值。
所以
$errorFilesShuffled = shuffle($errorFiles);
if ($errorFilesShuffled === true)
echo "HURRAY";
确实会回应 HURRAY
要使您的代码正常工作,您需要将其更改为:
shuffle($errorFiles); // The array will be given per reference
return $this->render('errors/show.html.twig', [
'gifs' => $errorFiles
]);
我试图将一个目录中的所有图像放入一个数组中,然后对其进行洗牌,然后在 Symfony 的视图中显示它。
例如:
/images/theme/404/01.gif
/images/theme/404/02.gif
/images/theme/404/03.gif
是图片,但我不知道有多少张图片。我尝试随机播放这些图像以在之后显示它。
我这样做了:
控制器
public function showAction()
{
$dir = $this->get('kernel')->getRootDir() . '/../web/images/theme/404/';
$dh = opendir($dir);
$errorFiles = array();
$errorFilesShuffled = shuffle($errorFiles);
while (false !== ($filename = readdir($dh)))
if ($filename != '.' && $filename != '..' && $filename[0] != '.')
$errorFilesShuffled[] = $filename;
return $this->render('errors/show.html.twig', [
'gifs' => $errorFilesShuffled
]);
}
查看
{% for image in gifs %}
<div class="clearfix mosaicflow">
<div class="mosaicflow__item">
<img src="{{ asset('/images/theme/404/'~image) }}" />
</div>
</div>
{% endfor %}
我收到此错误错误:Warning: Cannot use a scalar value as an array
编辑
有了这个控制器,我再也没有错误了。
控制器
public function showAction()
{
$dir = $this->get('kernel')->getRootDir() . '/../web/images/theme/404/';
$dh = opendir($dir);
$errorFiles = array();
while (false !== ($filename = readdir($dh)))
if ($filename != '.' && $filename != '..' && $filename[0] != '.')
$errorFiles[] = $filename;
$errorFilesShuffled = shuffle($errorFiles);
return $this->render('errors/show.html.twig', [
'gifs' => $errorFilesShuffled
]);
}
但是我还有一个问题,我在页面上看不到图片。当我检查 HTML 时,div <div class="clearfix mosaicflow">
甚至不在这里。
如果您查看函数 shuffle() 的定义,您会注意到数组将按引用给出,函数将 return 一个布尔值。
所以
$errorFilesShuffled = shuffle($errorFiles);
if ($errorFilesShuffled === true)
echo "HURRAY";
确实会回应 HURRAY
要使您的代码正常工作,您需要将其更改为:
shuffle($errorFiles); // The array will be given per reference
return $this->render('errors/show.html.twig', [
'gifs' => $errorFiles
]);