function example()
{
foreach ($choices as $key => $choice) { # \__ both should run parallel
foreach ($vtitles as $keystwo => $vtitle) { # /
$options .= '<option value="'. check_plain($key) .'" title="' . $vtitle . '"' . $selected
.'>'. check_plain($choice) .'</option>';
} // end of vtitle
} // end of choice
return $options;
}
Run Code Online (Sandbox Code Playgroud)
回答以下一些问题以及我想要实现的目标.
$choices没有数字索引.$vtitle被数字索引.$options变量.问题是,$choices[0]和$vtitle[0] 应该只使用一次.希望我能够表达我的问题.$vtitles为每个值通过一次数组$choices.@hakre:谢谢我在你的帮助下几乎解决了它.
我收到变量的错误$vtitle:
InvalidArgumentException: Passed variable is not an array or object, using empty array
instead in ArrayIterator->__construct() (line 35 of /home/vishal/Dropbox/sites/chatter/sites
/all/themes/kt_vusers/template.php).
Run Code Online (Sandbox Code Playgroud)
我确定它是一个数组,这是输出使用 print_r
Array ( [0] => vishalkh [1] => newandold )
Run Code Online (Sandbox Code Playgroud)
可能出了什么问题?
以下为我工作,谢谢你hakre
while
(
(list($key1, $value1) = each($array1))
&& (list($key2, $value2) = each($array2))
)
{
printf("%s => %s, %s => %s \n", $key1, $value1, $key2, $value2);
}
Run Code Online (Sandbox Code Playgroud)
hak*_*kre 11
它与您使用伪代码概述的方式不起作用.但是,SPL提供了一种迭代多个迭代器的方法.它被调用MultipleIterator,您可以根据需要附加尽可能多的迭代器:
$multi = new MultipleIterator();
$multi->attachIterator(new ArrayIterator($array1));
$multi->attachIterator(new ArrayIterator($array2));
foreach($multi as $value)
{
list($key1, $key2) = $multi->key();
list($value1, $value2) = $value;
}
Run Code Online (Sandbox Code Playgroud)
看到它在行动:演示
编辑:第一个示例显示了SPL的建议.它的好处是它可以处理任何类型的迭代器,而不仅仅是数组.如果你想表达类似于数组的东西,你可以用经典while(list()=each())循环实现类似的东西,它允许更多的表达式foreach.
while
(
(list($key1, $value1) = each($array1))
&& (list($key2, $value2) = each($array2))
)
{
printf("%s => %s, %s => %s \n", $key1, $value1, $key2, $value2);
}
Run Code Online (Sandbox Code Playgroud)
另请参阅相关问题:PHP foreach循环中的多个索引变量