+ -
当前位置:首页 → 问答吧 → 请问这个PHP数组要怎么循环

请问这个PHP数组要怎么循环

时间:2011-10-02

来源:互联网

数据表里有个ID的字段。假设有 2 8 10 50 560 860 等ID

PHP code

$res=mysql_query("SELECT * FROM news WHERE type='cp'");
   $id ='';
   
while($rs1=mysql_fetch_array($res)) {
  $id .= "".$rs1['id'].""; //循环出分类下的所有ID
   
   
  $arr = array ($id) ;//把该ID的编成数组,,在这里错了,没有 逗号,数组中的KEY永远只有“0”。
  foreach($arr as $key=>$val){//遍历数组中的ID,这里也就跟着错了,怎么遍历都只能是一个ID(还是281050560860)
   
   $ii=$val[0];
   
   
  $res=mysql_query("SELECT * FROM news WHERE id='$ii'");//这里的ID要等于遍历出来的各个ID,每个ID执行一次 下方的“执行模块代码”,直到该分类下的ID都执行完一遍就停止。
   
   $rs=mysql_fetch_array($res);
    $name=$rs['name'];

   这里是其他执行模块代码

  echo "$name 模块代码运行成功";//这里要提示 所有ID的 成功信息,一行一条。
 }

}



要成功 运行 代码注释里的功能。

或者说,遍历出该分类下的所有ID,然后按ID执行其他代码一个ID执行一次,直到都执行一次后就停止。

搞了大半天搞晕了。要怎么弄了,教下,最好给出代码,我已经晕了

作者: hudiegud2   发布时间: 2011-10-02

PHP code
$arr = array($id); //这一行修改为$arr[] = $id;

作者: T5500   发布时间: 2011-10-02

引用 1 楼 t5500 的回复:
PHP code
$arr = array($id); //这一行修改为$arr[] = $id;


这样不行的。你 print_r,看下,还是只有一个key,那就是0

作者: ppxxyy123   发布时间: 2011-10-02

楼主这个问题我也想学习学习。哪位高人解答下。给出完整代码学习下

作者: ppxxyy123   发布时间: 2011-10-02

PHP code
$res = mysql_query("SELECT * FROM news WHERE type='cp'");
$arr = array();
while ($rs1 = mysql_fetch_array($res)) {
      $arr[] = $rs1['id'];
      foreach ($arr as $key => $val) {
          $res = mysql_query("SELECT * FROM news WHERE id='{$val}'");
          $rs = mysql_fetch_array($res);
          $name = $rs['name'];
          echo "$name 模块代码运行成功";
      }
}

作者: T5500   发布时间: 2011-10-02

晕,看得不够仔细,还是不对,照你的思路写,foreach()循环是多余的。
PHP code
$res = mysql_query("SELECT * FROM news WHERE type='cp'");
while($row = mysql_fetch_array($res)) {
    $result = mysql_query("SELECT * FROM news WHERE id='".$row['id']."'";
    $rs = mysql_fetch_array($result);
    $name = $rs['name'];
    echo "$name 模块代码运行成功";
}

作者: T5500   发布时间: 2011-10-02

对每个ID执行一条SQL这样处理的效率太低了,应该可以用一条SQL语句查询出所有的结果再用while()循环处理:
PHP code
$res = mysql_query("SELECT * FROM news WHERE type='cp'");
$arr = array();
while($row = mysql_fetch_array($res)) $arr[] = $row['id'];
$sql = "SELECT * FROM news WHERE id IN ('".implode("','", $arr)."')";
$res = mysql_query($sql);
while($row = mysql_fetch_array($res)) {
    $name=$rs['name'];
    //这里是其他执行模块代码
    echo "$name 模块代码运行成功";
}

作者: T5500   发布时间: 2011-10-02

可怜的T5500 肯定用的是 GG浏览器

作者: PhpNewnew   发布时间: 2011-10-02

引用 6 楼 t5500 的回复:
对每个ID执行一条SQL这样处理的效率太低了,应该可以用一条SQL语句查询出所有的结果再用while()循环处理:

PHP code
$res = mysql_query("SELECT * FROM news WHERE type='cp'");
$arr = array();
while($row = mysql_fetch_array($res)) $arr[] = $row['……


3种都只能执行一次。没办法循环执行。还有其他方法没呀。哥

作者: hudiegud2   发布时间: 2011-10-02

SELECT * FROM news WHERE type='cp'
SELECT * FROM news WHERE id='$id'

你的$id 不就是从 第一条SQL里取得的么?

难道这两条SQL难道不能只用
SELECT * FROM news WHERE type='cp'

然后 Foreach 读出里面的iid 再取得里面的 'name' ?



作者: PhpNewnew   发布时间: 2011-10-02