
正文
php遍历数据不按顺序 php遍历数据不按顺序排列
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
PHP遍历目录下的图片,按顺序显示问题
?php
error_reporting(0);
echo "htmlheadtitle图片/title/headbody bgcolor=000000centerfont size=2 color=red"; //输出html相关代码
$page = $_GET['page']; //获取当前页数
$max = 3; //设置每页显示图片最大张数
$dir = "./image/";
$handle = opendir($dir); //当前目录
while (($file = readdir($handle)) !== false) { //遍历该php文件所在目录
list($filesname, $kzm) = explode(".", $file); //获取扩展名
if ($kzm == "gif" or $kzm == "jpg" or $kzm == "JPG" or $kzm == "png") { //文件过滤
if (!is_dir('./' . $file)) { //文件夹过滤
$array[] = $file; //把符合条件的文件名存入数组
$i++; //记录图片总张数
}
}
}
for ($j = $max * $page; $j ($max * $page + $max) $j $i; ++$j) { //循环条件控制显示图片张数
echo "img widht=200 height=200 src=image\\" . $array[$j] . "" . "br"; //输出图片数组
}
$Previous_page = $page - 1;
$next_page = $page + 1;
if ($Previous_page 0) {
echo "上页";
echo "a href=?page=$next_page下页/a";
} else if ($page = $i / $max) {
echo "a href=?page=$Previous_page上页/a";
echo "a href=?page=$next_page下页/a";
} else {
echo " a href=?page=$Previous_page上页/a";
echo "下页";
}
echo "/center/body/html";
?
相关问答
Q1: PHP不用递归遍历目录下所有文件的代码
实现代码:
/**
*
PHP
非递归实现查询该目录下所有文件
*
@param
unknown
$dir
*
@return
multitype:|multitype:string
*/
function
scanfiles($dir)
{
if
(!
is_dir
(
$dir
))
return
array
();
//
兼容各操作系统
$dir
=
rtrim
(
str_replace
(
'\\',
'/',
$dir
),
'/'
)
.
'/';
//
栈,默认值为传入的目录
$dirs
=
array
(
$dir
);
//
放置所有文件的容器
$rt
=
array
();
do
{
//
弹栈
$dir
=
array_pop
(
$dirs
);
//
扫描该目录
$tmp
=
scandir
(
$dir
);
foreach
(
$tmp
as
$f
)
{
//
过滤.
..
if
($f
==
'.'
||
$f
==
'..')
continue;
//
组合当前绝对路径
$path
=
$dir
.
$f;
//
如果是目录,压栈。
if
(is_dir
(
$path
))
{
array_push
(
$dirs,
$path
.
'/'
);
}
else
if
(is_file
(
$path
))
{
//
如果是文件,放入容器中
$rt
[]
=
$path;
}
}
}
while
(
$dirs
);
//
直到栈中没有目录
return
$rt;
}
附另一篇:不用递归遍历目录下的文件
如果要遍历某个目录下的所有文件(包括子目录),最首先想到的思路就是用递归:先处理当前目录,再处理当前目录下的子目录。不用递归可不可以呢?以前学数据结构的时候看到过,递归其实是利用堆栈来实现的,递归的特点就是不断的调用自身,最后一次的调用是最先执行完的,倒数第二次调用是其次执行完的,依次类推,最初的调用是最后执行完的。如果理解了递归的原理,其实就可以把所有用递归的实现转化为非递归的实现。
用非递归方式遍历某个目录下的所有文件,思路主要分三步:
1.
创建一个数组,将要遍历的这个目录放入;(其实就是创建了一个栈)
2.
循环处理这个数组,循环结束的条件是数组为空;
3.
每次循环,处理数组中的一个元素,并将元素删除,如果这个元素是目录,则将目录下所有的子元素加入数组;
按照这种思路写出的代码如下:
/**
*
遍历某个目录下的所有文件
*
@param
string
$dir
*/
function
scanAll($dir)
{
$list
=
array();
$list[]
=
$dir;
while
(count($list)
0)
{
//弹出数组最后一个元素
$file
=
array_pop($list);
//处理当前文件
echo
$file."\r\n";
//如果是目录
if
(is_dir($file))
{
$children
=
scandir($file);
foreach
($children
as
$child)
{
if
($child
!==
'.'
$child
!==
'..')
{
$list[]
=
$file.'/'.$child;
}
}
}
}
}
这里我并没有认为递归有多大的缺点,事实上很多情况下,用递归来设计还是非常简洁可读的,至于效率问题,除非在递归深度特别大的时候,才会有影响。
以下是用递归的实现,作为对比:
/**
*
遍历某个目录下的所有文件(递归实现)
*
@param
string
$dir
*/
function
scanAll2($dir)
{
echo
$dir."\r\n";
if
(is_dir($dir))
{
$children
=
scandir($dir);
foreach
($children
as
$child)
{
if
($child
!==
'.'
$child
!==
'..')
{
scanAll2($dir.'/'.$child);
}
}
}
}
运行发现,两个函数的结果略有不同,主要表现在打印的顺序上。函数一运行结果的顺序是倒着的,是因为压栈的顺序正好和scandir出来的顺序相反了,可以将第21行改一下:
$children
=
array_reverse(scandir($file));
这样出来结果就完全相同了。
Q2: php中给出一组数组,要求把这组数据打乱顺序后输出,而且不能重复!!请高手帮忙呀!
php遍历数据不按顺序你要代码还是算法啊?
php遍历数据不按顺序我就直接说下大概算法好php遍历数据不按顺序了
假设有个数组里面有10个数字
然后你来个循环php遍历数据不按顺序,10个数字10次也差不多php遍历数据不按顺序了
for($i=0;$i10;$i++){
$a1=rand(0,9);//随机0到9的数字的
$a2=rand(0,9);
/*
*其实就是调换2个数字
*/
$j=$array[$a1];
$array[$a1]=$array[$a2];
$array[$a2]=$j;
}
循环十次,基本都打乱了,你的打乱没什么要求,所以这样应该符合要求了
Q3: php遍历数据库问题
首先你要说你用的是什么数据库。用最普通的mysql数据库来说,php自带了一些操作数据库的函数。
首先你将语句写入一个变量:
$Query = "select * from A_table";
然后用mysql_query这个函数执行这条语句,并将输出结果放在一个变量中:
$Result = mysql_query($Query);
这个$Result变量就是一个资源变量,包含了所有符合条件的结果。要将结果处理,需要用另一个函数
mysql_fetch_assoc:
while($Row = mysql_fetch_assoc($Result))
{
//这里$Row就是遍历了结果的每一行。假设有个字段叫A_field,你要把它输出
echo $Row["A_field"];
//其他操作类似。
}
Q4: PHP遍历数组的方法汇总
今天有个朋友问我一个问题php遍历数组的方法,告诉她了几个。顺便写个文章总结下,如果总结不全还请朋友们指出
第一、foreach()
foreach()是一个用来遍历数组中数据的最简单有效的方法。
?php
$urls=
array('aaa','bbb','ccc','ddd');
foreach
($urls
as
$url){
echo
"This
Site
url
is
$url!
br
/";
}
?
显示结果:
This
Site
url
is
aaa
This
Site
url
is
bbb
This
Site
url
is
ccc
This
Site
url
is
ddd
第二、while()
和
list(),each()配合使用。
?php
$urls=
array('aaa','bbb','ccc','ddd');
while(list($key,$val)=
each($urls))
{
echo
"This
Site
url
is
$val.br
/";
}
?
显示结果:
This
Site
url
is
aaa
This
Site
url
is
bbb
This
Site
url
is
ccc
This
Site
url
is
ddd
第三、for()运用for遍历数组
?php
$urls=
array('aaa','bbb','ccc','ddd');
for
($i=
0;$i
count($urls);
$i++){
$str=
$urls[$i];
echo
"This
Site
url
is
$str.br
/";
}
?
显示结果:
This
Site
url
is
aaa
This
Site
url
is
bbb
This
Site
url
is
ccc
This
Site
url
is
ddd
有时候有人也在问这几种遍历数组的方法哪个更快捷些呢,下面做个简单的测试就明白了
===========
下面来测试三种遍历数组的速度
===========
一般情况下,遍历一个数组有三种方法,for、while、foreach。其中最简单方便的是foreach。下面先让我们来测试一下共同遍历一个有50000个下标的一维数组所耗的时间。
?php
$arr=
array();
for($i=
0;
$i
50000;
$i++){
$arr[]=
$i*rand(1000,9999);
}
function
GetRunTime()
{
list($usec,$sec)=explode("
",microtime());
return
((float)$usec+(float)$sec);
}
######################################
$time_start=
GetRunTime();
for($i=
0;
$i
count($arr);
$i++){
$str=
$arr[$i];
}
$time_end=
GetRunTime();
$time_used=
$time_end-
$time_start;
echo
'Used
time
of
for:'.round($time_used,
7).'(s)br
/br
/';
unset($str,
$time_start,
$time_end,
$time_used);
######################################
$time_start=
GetRunTime();
while(list($key,
$val)=
each($arr)){
$str=
$val;
}
$time_end=
GetRunTime();
$time_used=
$time_end-
$time_start;
echo
'Used
time
of
while:'.round($time_used,
7).'(s)br
/br
/';
unset($str,
$key,
$val,
$time_start,
$time_end,
$time_used);
######################################
$time_start=
GetRunTime();
foreach($arr
as$key=
$val){
$str=
$val;
}
$time_end=
GetRunTime();
$time_used=
$time_end-
$time_start;
echo
'Used
time
of
foreach:'.round($time_used,
7).'(s)br
/br
/';
?
测试结果:
Used
time
of
for:0.0228429(s)
Used
time
of
while:0.0544658(s)
Used
time
of
foreach:0.0085628(s)
经过反复多次测试,结果表明,对于遍历同样一个数组,foreach速度最快,最慢的则是while。从原理上来看,foreach是对数组副本进行操作(通过拷贝数组),而while则通过移动数组内部指标进行操作,一般逻辑下认为,while应该比foreach快(因为foreach在开始执行的时候首先把数组复制进去,而while直接移动内部指标。),但结果刚刚相反。原因应该是,foreach是PHP内部实现,而while是通用的循环结构。所以,在通常应用中foreach简单,而且效率高。在PHP5下,foreach还可以遍历类的属性。
以上所述就是本文的全部内容了,希望大家能够喜欢。
Q5: php如何遍历数组
1、在test.php文件内,使用header设置test.php执行的编码为utf8,避免输出中文的时候出现乱码。
2、在test.php文件内,创建一个测试的数组,例如,定义一个分类的数组,其对应的索引值分别为0,4,8。
3、在test.php文件内,使用array_values()方法将上一步的数据重新排序,并且从0开始,把重新排序的数组保存在$result变量中。
4、在test.php文件内,使用foreach方法遍历数组,其中$k为索引值,$v为索引值对应的数组值。
5、在test.php文件内,使用echo方法输出数组中的索引值和对应的数组值即可。
关于php遍历数据不按顺序和php遍历数据不按顺序排列的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。








