【问题标题】:Replacing "foreach" with "for" in PHP在 PHP 中将“foreach”替换为“for”
【发布时间】:2014-11-25 12:43:12
【问题描述】:

我需要用“for”替换我的“foreach”,但实际上我不知道怎么做。 这是我的 php 代码的一部分:

$r = "";
$j = 0;
foreach ($orgs as $k => $v) {
    echo "\n\r" . $v->id . "\n\r";
    if (1) {
        $a_view_modl = ArticleView :: model($v->id, $v->id);
        $connection = $a_view_modl->getDbConnection();

谢谢!

【问题讨论】:

  • 你需要它做什么?
  • 为什么这需要一个 for 循环?你仍然可以在 foreach 循环的每次迭代中增加变量
  • How 'foreach' actually works 的可能重复项

标签: php loops foreach


【解决方案1】:
$r = "";
$j = 0;
foreach ($orgs as $k => $v) {
    echo "\n\r" . $v->id . "\n\r";
    if (1) {  //you don't really need this, because it's allways true
        $a_view_modl = ArticleView :: model($v->id, $v->id);
        $connection = $a_view_modl->getDbConnection();

如果$orgs是一个关联数组,它变成:

$r = "";
$j = 0;
for($i = 0; $i < count($orgs); $i++)
{
    echo "\n\r" . $orgs[$i]->id . "\n\r";
    $a_view_modl = ArticleView :: model($orgs[$i]->id, $orgs[$i]->id);
    $connection = $a_view_modl->getDbConnection();
}

如果你选择这个解决方案,最好先做一些检查。

如果您使用foreach 实现您的解决方案,在这种情况下更具可读性,您可以像往常一样增加或减少给定变量:

$i++; //if you want the increment afterwards
++$i; //if you want the increment before you read your variable

减量也一样:

$i--; //decrement after reading the variable
--$i; //decrement before you read the variable

【讨论】:

  • 希望 $orgs 不是关联数组
  • @andrew,我完全同意你的看法。但既然他想要一个 for 循环,我认为他应该知道他想做什么;)
【解决方案2】:
$r = "";
$j = 0;
for($i = 0 ; $i < count($orgs); $i++)
{
    $v = $orgs[$i];
    echo "\n\r" . $v->id . "\n\r";
    if (1) {
        $a_view_modl = ArticleView :: model($v->id, $v->id);
        $connection = $a_view_modl->getDbConnection();
}

【讨论】:

    【解决方案3】:

    foreach 循环只是一个可读性更好的for 循环。它接受一个数组并将当前键(在本例中为索引)存储到$k,并将值存储到$v。 然后$v 具有您在代码的 sn-p 中使用的值。
    for 循环只接受索引数组,不接受关联数组。

    我们可以通过将$v替换为$orgs[ index ]来重写代码,其中索引从0开始。

    $r = "";
    $j = 0;
    
    for ($i = 0; $i < count($orgs); $i++) {
        echo "\n\r" . $orgs[$i]->id . "\n\r";
        if (1) {
            $a_view_modl = ArticleView::model($orgs[$i]->id, $orgs[$i]->id);
            $connection = $a_view_modl->getDbConnection();
    

    【讨论】:

      【解决方案4】:
      foreach ($orgs as $k => $v) {
          // Your stuff
      }
      

      for循环

      for ($i = 0; $i < count($orgs); $i++) {
          // Your stuff ... use $orgs[$i];
      }
      

      【讨论】:

        猜你喜欢
        • 2010-11-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多