我试图创建一个漂亮而简单的迭代器并且它起初工作,然后我意识到我需要更多关于该函数的信息,所以我试图扩展它并且它没有用。
使用示例
$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>'
);
答案 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!
}
}