Dav*_*ave 1 php arrays api loops
我应该首先说我不是一个PHP人,所以如果有人可以帮忙解决这个问题,我会尽力去理解任何建议.
我有以下代码访问API并通过PHP包装器输出一些数据:
$idMovie=11;
$pelinfo = $tmdb_V3->movieDetail($idMovie);
<h1><?php echo $pelinfo[original_title]; ?></h1>
<h2><?php echo $pelinfo[release_date]; ?></h2>
<img src="<?php echo $pelinfo[poster_path]; ?>">
<p><?php echo $pelinfo[overview]; ?></p>
Run Code Online (Sandbox Code Playgroud)
这很好,它显示了一个项目的数据.我需要做的是显示更多项目的数据.到目前为止,我只是重复了块并更改了$ idMovie变量 - 但这当然不是这样做的方法.
我想我需要这样做:
设置一个数组来保存每个变量,所以$ idMovie [12,34,56,78]
创建一个循环来遍历每个变量,并使用上面的代码块输出数据.
如果有人能指出我正确的方向,那将是最有帮助的.
谢谢戴夫
PHP中有一个非常有用的结构 - foreach:
<?php foreach($idMovies as $idMovie):
$pelinfo = $tmdb_V3->movieDetail($idMovie); ?>
<h1><?php echo $pelinfo['original_title']; ?></h1>
<h2><?php echo $pelinfo['release_date']; ?></h2>
<img src="<?php echo $pelinfo['poster_path']; ?>">
<p><?php echo $pelinfo['overview']; ?></p>
<?php endforeach; ?>
Run Code Online (Sandbox Code Playgroud)
在这里,我使用了所谓的"替代语法",当HTML片段中包含PHP片段时非常有用.
然而,迭代这个数组的方法不止一种.例如:
<?php
$idMovies = array(11, 22, 33, 42);
$pelHTMLs = array_map(function($id) use ($tmdv_V3) {
$pelInfo = $tmdv_V3->movieDetail($id);
// perhaps you should check the result here, no?
return <<<HTML
<h1>$pelInfo[original_title]</h1>
<h2>$pelInfo[release_date]</h2>
<img src="$pelInfo[poster_path]" />
<p>$pelInfo[overview]</p>
HTML;
}, $idMovies);
echo implode("\n", $pelHTMLs);
?>
Run Code Online (Sandbox Code Playgroud)
在这里,我使用array_map函数创建一个数组$pelHTMLs
,其中每个元素都是电影数据的HTML表示,与从$idMovies
数组中获取的id相关.然后所有这些部分只是"加入"一个带有"内爆"功能的字符串 - 然后回声.
这种形式经常在PHP 5.3+环境中使用(当你可以提供匿名函数array_map
和类似的列表理解函数时).但它实际上也可以在PHP 5.2中完成 - 你只需要将这部分提取到一个单独的函数(或类方法)中,然后将它的名称(或带有两个参数的数组 - 类名和方法名)作为'callback'参数.