我有一个如下所示的数组:
$elm = 'a,b,c';
我需要数组的值,所以我使用explode
来获取它们:
$q = explode(",",$elm);
然后我想将每个项目回显到span
,所以我创建了一个数组:
$arr = array();
foreach($html->find($q[0]) as $a) {
$arr[] = $a->outertext;
}
$arr2 = array();
foreach($html->find($q[1]) as $b) {
$arr2[] = $b->outertext;
}
$arr3 = array();
foreach($html->find($q[2]) as $c) {
$arr3[] = $c->outertext;
}
最后我输出如下:
echo "<ul>";
for($i=0; $i<sizeof($arr + $arr2 + $arr3); $i++)
{
echo "<li>";
echo "<span>".$arr[$i]."</span>";
echo "<span>".$arr2[$i]."</span>";
echo "<span>".$arr3[$i]."</span>";
echo "</li>";
}
echo "</ul>";
问题在于我必须编写所有项目($q[0] + $q[1] + $q[2])
和相应的范围(<span>".$arr[$i]."</span>)
这是一个问题,因为实际上我不知道第一个数组的内容和时长( $ elm)是。因此,我不想在身体上&#39;记下所有的span元素,而不是根据数组$elm
动态创建它们。我尝试了很多东西,但我无法弄清楚。
答案 0 :(得分:1)
这里的基本问题是您不知道$elm
将包含多少元素。 foreach
是这里的最佳选择,因为它不需要数组的长度来遍历它。
使用嵌套的foreach
循环来存储数组中的所有outertexts:
foreach (explode(",", $elm) as $elem) {
foreach ($html->find($elem) as $a) {
$arr[$elem][] = $a->outertext;
}
}
$arr[$elem][]
是重要的一点。在外循环的每次迭代中,$elem
的值将是a,b和c。在内部循环的每次迭代中,它将在数组中创建一个新索引:$arr['a']
,$arr['b']
和$arr['c']
,并将outertext值添加到相应的索引中。
一旦您将所有必需的值存储在数组中,它只需要循环遍历它。由于我们在这里有一个多维数组,你需要再次使用一个嵌套循环:
echo "<ul>";
foreach ($arr as $sub) {
echo "<li>";
foreach ($sub as $span) {
echo "<span>".$span."</span>";
}
echo "</li>";
}
echo "</ul>";