【问题标题】:php multidimensional array foreachphp多维数组foreach
【发布时间】:2015-12-24 09:04:05
【问题描述】:

我正在使用三个长度相同的不同数组,它们在 foreach 循环期间填充了值:

foreach(......)
   {
   $array1[]=value1;
   $array2[]=value2;
   $array3[]=value3;
   }

那么必须回显这些数组:

$i = 0;
while($i < count($array1))
   {
   echo $array1[i];
   echo $array2[i];
   echo $array3[i];
   $i++;
   }

有没有更优雅的方法来解决这个问题,例如 foreach 循环和多维数组?

【问题讨论】:

  • 您可以在任何数组上使用foreach 并获取密钥:foreach ($array1 as $key =&gt; $value) 然后您已经有了第一个值和其他数组中值的密钥。但我可能只使用一个数组来存储所有数据。
  • 试试array_map or array_walk or array_walk_recursive 这些函数将帮助您实现这一目标。
  • 你能完成 foreach(.....) 吗?是什么隐藏了这些点?

标签: php multidimensional-array


【解决方案1】:

假设你的数组:

$a1 = [2,3,4];
$a2 = [6,7,8];
$a3 = [9,10,11];


array_walk($a1, function($v, $k) use($a2, $a3)
{
    echo $v;
    echo $a2[$k];
    echo $a3[$k];
});

或者干脆

foreach($a1 as $k => $v)
{
    echo $v;
    echo $a2[$k];
    echo $a3[$k];
}

注意:

你不应该在 while 条件下计数, 因为每次迭代都会调用它!没有优化

while($i < count($array1))

应该替换为

$count = count($array1);
while($i < $count)

【讨论】:

    【解决方案2】:

    你能把它做成一个对象吗?可能会创建一个实际的类,但 StdClass 可以工作。

    foreach(...)
    {
        $obj = new StdClass();
        $obj->value1 = $value1;
        $obj->value2 = $value2;
        $obj->value3 = $value3;
        $array[] = $obj;
    }
    
    foreach($array as $obj)
    {
        echo $obj->value1;
        echo $obj->value2;
        echo $obj->value3;
    }
    

    仍然不是很优雅但没有丑陋的while循环。

    【讨论】:

    • 您可以将该对象从foreach 中拉出,并将其实例用于foreach
    猜你喜欢
    • 2017-10-10
    • 1970-01-01
    • 1970-01-01
    • 2015-08-13
    • 2012-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多