[php arr]三种php数组输出方法

2010年8月13日星期五 | | |

三种php数组输出方法

以下为引用的内容: $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'];
}
$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;

From:http://www.byfor.cn/html-186519-1.html
 

0 评论:


所有文章收集于网络,如果有牵扯到版权问题请与本站站长联系。谢谢合作![email protected]