在类函数中轻松迭代php

时间:2014-05-25 03:54:47

标签: javascript php class loops

我试图创建一个漂亮而简单的迭代器并且它起初工作,然后我意识到我需要更多关于该函数的信息,所以我试图扩展它并且它没有用。

使用示例

$easyCMS->iterate($post,
     echo $content[0];
     echo $content[1];
 );

班级功能

public function iterate($d,$fn){
   $this->item = $d;
   foreach($this->item as $post){
     echo $fn;
   }
}

当前Index.php用法

$post = $easyCMS->my_query('SELECT * FROM  `newsPost`');
//returns array
$easyCMS->iterate($post,
   $content[0]."<br>",
   $content[1]."<br>",
   $content[2]."<br>",
       $content[3]."<br>",
       $content[4]."<br>",
);
 //$post would be the first argument and after that would be what we want our function to do.

我收到错误=&gt;

Parse error: syntax error, unexpected ';' in .../index.php on line 23

我知道它是常数$content[num],但我想知道我是如何做到的,因为我知道我可以使用调用方法使用JavaScript。

我的数据库表看起来像

id:1 == content:&#34; Whats up&#34; == ......等等。

我希望我的代码能够迭代这些代码,然后我可以像这样编写

$easyCMS->iterate($post,
  '<div class="hello">'.$content[0].'</div><div id="post_'.$content[1].'"><div class="content">'.$content[2].'</div>'
);

3 个答案:

答案 0 :(得分:1)

错误是由:

引起的
$easyCMS->iterate($post,
   $content[0]."<br>";
   $content[1]."<br>";
   $content[2]."<br>";
   $content[3]."<br>";
   $content[4]."<br>";
);

应该是

$easyCMS->iterate($post,
   $content[0]."<br>",
   $content[1]."<br>",
   $content[2]."<br>",
   $content[3]."<br>",
   $content[4]."<br>"
);

我认为此代码无法满足您的需求

答案 1 :(得分:0)

不禁认为你在这里过于复杂。

如果您使用的是没有索引键的数组,那么它就像下面这样简单:

public function iterate($d,$fn){
     foreach($d as $content){
        echo $content;
     }
  }

只有索引是key =&gt;对,你需要它:

foreach ($d as $key=>$value) {
stuff//
}


$easyCMS->iterate($post,
  '<div class="hello">'.$content[0].'</div>
  <div id="post_'.$content[1].'"><div class="content">'.$content[2].'</div>'
);

错了。当使用“和”时,你想要包裹'内部'。

如果,你想要的是通过一个循环中的循环,你想要的东西:

Foreach($post as $pos) {
$class->some_func($pos);
}

public function some_func ($post) {
/formatting.
echo $post;
/formatting.
}

根据您的代码,我可以提出的最简单的方法是:

foreach($stuff_from_database_call as $content) 
echo "formatting stuff". $content . "/close formatting";

从技术上讲,你可以1行,只要不介意使用。加入字符串:)

注意缺少[0] [1]等,这是不需要的,因为你在迭代数组。但是,如果它是一个key =&gt;对,你可以这样做:

foreach($stuff_from_database_call as $key=>$content) 
echo "formatting stuff". $key[$content] . "/close formatting";

在您写完并接受自己的答案后更新了此内容。而不是:

public function iterate($d,$fn){
     foreach($d as $item){
        $txt = str_replace('{author}',$item["author"],$fn);
    $txt = str_replace('{id}',$item["id"],$txt );
    $txt = str_replace('{content}',$item["content"],$txt);
    $txt = str_replace('{date}',$item["date"],$txt);
    echo $txt;
   }
}

我建议更像:

public function iterate($d,$fn){
    foreach($d as $item=>$value){
    $txt = str_replace('{$value}',$item[$value],$fn);
    echo $txt;
   }
}

这将使其更加灵活,因为您可以轻松添加字段,而无需触摸功能本身。在编码的时候,总是尽可能地尝试这样做,这样你就可以避免头痛。

无论哪种方式,很高兴你把它分类,很高兴你回来发布你的溶剂。

1最后一次尝试。尝试将您的变量命名为更友好的读者:) $ d远远不够描述。对于你自己和其他任何需要查看代码的人来说,这是另一个可以避免的头痛:)

答案 2 :(得分:0)

这是一个简单迭代器的最佳方法,花了我一些时间,但我终于解决了它。

班级功能

public function iterate($d,$fn){
     foreach($d as $item){
        $txt = str_replace('{author}',$item["author"],$fn);
    $txt = str_replace('{id}',$item["id"],$txt );
    $txt = str_replace('{content}',$item["content"],$txt);
    $txt = str_replace('{date}',$item["date"],$txt);
    echo $txt;
   }
}

PHP页面IE index.php

$post = $easyCMS->my_query('SELECT * FROM  `newsPost`');
$easyCMS->iterate($post,'<div class="hello">{author}</div><div id="post_{id}"><div class="content">{content}</div></div>');

$easyCMS->my_query只是一个返回特定信息的常规查询

<强> my_query

public function my_query($sql)
{
     $array=array();//add an array
    $query = mysqli_query($this->connect,$sql);
    if($query > 0){
    $c = mysqli_num_rows($query);//get how many rows there are
    if($c > 1){//if greater than one push into the array
      while($fetch = mysqli_fetch_array($query)){//while loop to push
        array_push($array, $fetch);
      }
      return $array;
    }else{
     return mysqli_fetch_row($query);//rows is only one
    }
    }else{
    return "No such query";//if the query does not exist!
    }
}