以下为引用的内容: $bbbb=array("11"=>"aaa","22"=>"bbb");
//只能输出值value不能输出key
foreach($bbbb as $color)
echo $color;
//value与key都可输出
//value与key都可输出
while($color=each($bbbb)){
echo $color['key'];
}
php访问二维数组
$new =array("姓名"=>array("name","sunwei"),"地址"=>array("dz"),"编号"=>array("id")); 方法1: while ( list( $key, $val ) = each( $new ) ) { echo "$key => $val"."<br>"; while ( list( $key1, $val1 ) = each( $val ) ) { echo "$key1 => $val1"."<br>"; } } 方法2: foreach ($new as $v){ foreach ($v as $k => $vv){ echo "$k:$vv"; } }
PHP输出数组元素的方法
在实际开发中,经常要访问数组的值。如果每次都按数组索引来取数值元素,会非常麻烦。在
PHP中可以通过各种循环来快速访问数组元素。本节就介绍常用的for和foreach。
使用for循环语句输出数组元素对于一个按整数顺序索引的数组,可以通过for循环语句,来依次访问数组元素
<?php
$ms_office = array(
'word',
'excel',
'outlook',
'access'
);
for($i=0; $i<4; $i++)
{
echo "数组第".($i+1)." 个元素是:";
echo $ms_office[$i];
echo "<br/>";
echo "<br/>";
}
?>
使用foreach循环语句输出数组元素
PHP还专门为数组提供了一个循环语句:foreach循环语句,它的语法结构如下所示。
foreach($array as $some_var)
{
statement
}
其中foreach和as都是PHP关键字。该语法结构的含义是:按顺序,每次将数组$array中的一个元
素存入变量$some_var后执行statement语句,然后取下一个元素执行statement语句,依次下去,直到
所有元素都取到。和for循环语句一样,statement可以是单条语句,也可以是一个语句块。代码4-2可
以改写成代码4-3的形式,输出的结果和代码上面的完全一样。
使用foreach循环获取数组元素
<?php
$ms_office = array(
'word',
'excel',
'outlook',
'access'
);
foreach($ms_office as $software)
{
echo $software;
echo "<br/>";
echo "<br/>";
}
?>
这段代码将数组的每个元素依次存储在变量$software中,并且打印出来。foreach循环不仅可以获取数组元素,还可以获取索引
<?php
$ms_office = array(
'wd'=>'word',
'ec'=>'excel',
'ol'=>'outlook',
'ac'=>'access'
);
foreach($ms_office as $key=>$value)
{
echo $key.": ".$value;
echo "<br/>";
echo "<br/>";
}
?>
这段代码中,每次foreach循环都会将数组的一个索引赋给
变量$key,将其对应的值赋给变量$value。
现在在开发一套商城系统,碰到一个小问题。 比如我展示一个商品,在这个商品下面我想列出这个商品周围几条记录。 类似于这种排列方式,如下图: 当商品10前面没有记录时,则显示10后面的几条记录。 当商品10后面没有记录时,则显示10前面的几条记录。 当商品10前后都有记录时,则同时显示周围的几条记录。 虽然可以通过分别计算商品10的前后几条记录再取出相应的记录来达到目的,但是过程复杂,效率太差。 我在网上看到一些相册,好象有类似于这种,不知道大家有没有这方面的经验? 或者有没有好的想法?
引用:
原帖由 深空 于 2007-5-9 11:08 发表
需要两条SQL语句 假如商品10的ID是10,则前两条: SELECT * FROM product WHERE id < 10 ORDER BY id DESC LIMIT 2; 后两条: SELECT * FROM product WHERE id > 10 ORDER BY id ASC LIMIT 2;
这个方法一开始的时候已经考虑过了,为什么我没采用呢? 当商品10前面没有商品的时候(比如我删除了1-9的商品),那么我想排列应该是10 11 12 13 14 15。反之,10后面没商品的时候,应该是6 7 8 9 10。如果10之前只有8,那么排列应该是8 10 11 12 13 14。那么这种方式显然不大合适。 如果采用这种方法又想达到我的那种排列方式,那么肯定要计算商品10之前有几条记录,然后根据这个数字来决定商品10之后应该取出几条记录,但这么一弄的话,程序就变的复杂,速度应该也有不小的影响。 本来还想到的方法就是:采用文件缓存数据。就是把商品10的这些相关数据记录到缓存文件中,当访问到这个ID的商品时就把这个文件include进来。这个问题虽然解决了速度和效率问题,但出现另一个问题:删除商品的时候。这些缓存文件无法及时得到更新。 所以MySql中有没有这么一种函数或者方法,能够把商品10周围的记录同时读取出来?或者有更简介有效的达到我想要的这种效果 -------------------------------------------------------------------------------------------------------------------------------------- 感谢大家,我还是采用了最初的一个想法,比较笨一点。 先是计算ID=10之前有几条记录(限制只取3条),变量为$prenum,再计算后有几条记录,变量为$nextnum。总体要显示的数据为$allnum。两边记录数相等的情况为$pernum=$allnum/2。 然后根据这两个数据实际的大小来计算应该取出的记录数。
复制内容到剪贴板
代码:
if ($prenum >$nextnum&&$nextnum<$pernum){ //当前面的记录大于后面的记录且后面的记录小于平均数 $pre=$pernum;//前面应该取出的记录数 $next=$allnum-$prenum;、、后面应该取出的记录数 }elseif ($nextnum >$prenum&&$prenum<$pernum){ $pre=$allnum-$nextnum; $next=$nextnum; }else{ $pre=$prenum; $next=$nextnum; } //取出前几条 select id from table where id < '$id' limit $pre //取出后几条 select id from table where id > '$id' limit $next
过程有点繁杂,速度一般
需要两条SQL语句 假如商品10的ID是10,则前两条: SELECT * FROM product WHERE id < 10 ORDER BY id DESC LIMIT 2; 后两条: SELECT * FROM product WHERE id > 10 ORDER BY id ASC LIMIT 2;