php:foreach()如何分配给两个变量

Vis*_*ani 0 php foreach

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)

回答以下一些问题以及我想要实现的目标.

  1. 数组$choices没有数字索引.
  2. 数组$vtitle被数字索引.
  3. 它们不会相互缩短,因为我有代码在此代码运行之前会处理这个问题.
  4. 我试图返回$options变量.问题是,$choices[0]$vtitle[0] 应该只使用一次.希望我能够表达我的问题.
  5. 我不想$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循环中的多个索引变量

  • 我没有意识到这一点......有趣. (2认同)