二种遍历关联数组的方法

 更新时间:2016年11月25日 15:09  点击:1681

list() 函数用数组中的元素为一组变量赋值。

注意,与 array() 类似,list() 实际上是一种语言结构,不是函数。

each

each() 函数生成一个由数组当前内部指针所指向的元素的键名和键值组成的数组,并把内部指针向前移动。

返回的数组中包括的四个元素:键名为 0,1,key 和 value。单元 0 和 key 包含有数组单元的键名,1 和 value 包含有数据。

如果内部指针越过了数组范围,本函数将返回 false。


*/
 

$sports = array(
    'football' => 'good',
    'swimming' => 'very well',
    'running'  => 'not good'
 );
 
while (list($key, $value) = each($sports)) {
    echo $key.": ".$value."<br />";
}


/*
foreach
php教程中的foreach是用来进行循环对一个数组的所有元素。作者的foreach基本语法如下:

foreach ($array_variable as $value)
{
  [code to execute]
}

or

foreach ($array_variable as $key => $value)
{
  [code to execute]
}

*/

$sports = array(
    'football' => 'good',
    'swimming' => 'very well',
    'running'  => 'not good'
 );
 
foreach ($sports as $key => $value) {
    echo $key.": ".$value."<br />";
}

在php有parse_url函数,可以解析你给的地址,各部份的信息保存到一个数组,下面看一实例。

 

$url = "http://www.111cn.net.net/welcome/"; 

$parts = parse_url($url); 

print_r($parts); 

/*
array
(
    [scheme] => http
    [host] => www.111cn.net.net
    [path] => /welcome/
)

这样我们很空间取url各部份内容了。

可以看到,可以很容易分解出一个url的各个部,那如果要拿指定的部分出来的话也很容易,如:

view sourceprint?1 echo parse_url($url, php_url_path);

就是在第二个参数中,设定如下的参数:php_url_scheme, php_url_host, php_url_port, php_url_user, php_url_pass, php_url_path, php_url_query or php_url_fragment

*/

看一个复杂一点的函数

function parseurl($url) {
        $r  = "^(?:(?p<scheme>w+)://)?";
        $r .= "(?:(?p<login>w+):(?p<pass>w+)@)?";
        $r .= "(?p<host>(?:(?p<subdomain>[-w.]+).)?" . "(?p<domain>[-w]+.(?p<extension>w+)))";
        $r .= "(?::(?p<port>d+))?";
        $r .= "(?p<path>[w/]*/(?p<file>w+(?:.w+)?)?)?";
        $r .= "(?:?(?p<arg>[w=&]+))?";
        $r .= "(?:#(?p<anchor>w+))?";
        $r = "!$r!";                                                // delimiters
      
        preg_match ( $r, $url, $out );
      
        return $out;
    }

header(string,replace,http_response_code)
string 必需。规定要发送的报头字符串。
replace 可选。指示该报头是否替换之前的报头,或添加第二个报头。

默认是 true(替换)。false(允许相同类型的多个报头)。
 
http_response_code 可选。把 http 响应代码强制为指定的值。(php 4 以及更高版本可用)

跳转

header('location: http://www.111cn.net/');

发送http状态

header("status: 404 not found");

设置缓存

header("cache-control: no-cache, must-revalidate"); // http/1.1
header("expires: sat, 26 jul 1997 05:00:00 gmt");


利用header做文件下载功能

*/

header("content-type:application/pdf");

// 文件将被称为 downloaded.pdf

header("content-disposition:attachment;filename='downloaded.pdf'");

// pdf 源在 original.pdf 中
readfile("original.pdf");

?>

虽然php提供了大量的数组排序函数,但是都不太可以满足我们平常使用中的需要,下面我先介绍一下php中种排序函数,然后再综合一个实例来说数组值,键名等进行排序。

//sort() 函数按升序对给定数组的值排序。

$my_array = array("a" => "dog", "b" => "cat", "c" => "horse");

sort($my_array);
print_r($my_array);

//krsort(array,sorttype)函数将数组按照键逆向排序,为数组值保留原来的键。
$my_array = array("a" => "dog", "b" => "cat", "c" => "horse");
krsort($my_array);
print_r($my_array);

//看一款实例

function natkrsort($array)
{
    $keys = array_keys($array);
    natsort($keys);

    foreach ($keys as $k)
    {
        $new_array[$k] = $array[$k];
    }
  
    $new_array = array_reverse($new_array, true);

    return $new_array;
}

// arsort() arsort() 函数对数组进行逆向排序并保持索引关系。主要用于对那些单元顺序很重要的结合数组进行排序。

$my_array = array("a" => "dog", "b" => "cat", "c" => "horse");

arsort($my_array);
print_r($my_array);

//asort() 函数对数组进行排序并保持索引关系。主要用于对那些单元顺序很重要的结合数组进行排序

$my_array = array("a" => "dog", "b" => "cat", "c" => "horse");

asort($my_array);
print_r($my_array);

//缩合上面的实例,写一款数组排序函数

/**
 
  * 对数组排序
  * @param array $array 操作的数组
  * @param string $type key按键排序,value按值排序
  * @param string $field 字段名
  * @param string $order 排序方式asc顺序desc逆序
  * @return void
  */
 function sort(&$array, $type = 'value', $field = null, $order = 'asc') {
  if ($field) {
   foreach ($array as $key => $value) {
    $temp[$key] = $value[$field];
   }
   if ($order=='asc') {
    asort($temp);
   } else {
    arsort($temp);
   }
   $newarray = array();
   foreach ($temp as $key => $value) {
    $newarray[] = $array[$key];
   }
   $array = $newarray;
  } else {
   if ($type=='key') {
    if ($order=='asc') {
     ksort($array);
    } else {
     krsort($array);
    }
   } else {
    if ($order=='asc') {
     asort($array);
    } else {
     arsort($array);
    }
   }
  }
 }
  

可变变量名指的是使用一个变量的值作为这个变量的名称。在上面的例子中,通过使用两个$符号,你可以把hello设置成一个变量的名称

<?php $a = 'hello'; ?>

,就像下面那样。

<?php $$a = 'world'; ?>

通过上面的两个语句,有两个变量被定义:变量$a,装的内容是”hello” 以及变量$hello,装的内容是 “world”。 于是,下面的语言:

<?php echo "$a ${$a}"; ?>

跟下面的语句的输出完全一致:

<?php echo "$a $hello"; ?>

它们都输出:hello world。

[!--infotagslink--]

相关文章

  • php中eval()函数操作数组的方法

    在php中eval是一个函数并且不能直接禁用了,但eval函数又相当的危险了经常会出现一些问题了,今天我们就一起来看看eval函数对数组的操作 例子, <?php $data="array...2016-11-25
  • php 中file_get_contents超时问题的解决方法

    file_get_contents超时我知道最多的原因就是你机器访问远程机器过慢,导致php脚本超时了,但也有其它很多原因,下面我来总结file_get_contents超时问题的解决方法总结。...2016-11-25
  • Python 图片转数组,二进制互转操作

    这篇文章主要介绍了Python 图片转数组,二进制互转操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-09
  • HTTP 408错误是什么 HTTP 408错误解决方法

    相信很多站长都遇到过这样一个问题,访问页面时出现408错误,下面一聚教程网将为大家介绍408错误出现的原因以及408错误的解决办法。 HTTP 408错误出现原因: HTT...2017-01-22
  • php抓取网站图片并保存的实现方法

    php如何实现抓取网页图片,相较于手动的粘贴复制,使用小程序要方便快捷多了,喜欢编程的人总会喜欢制作一些简单有用的小软件,最近就参考了网上一个php抓取图片代码,封装了一个php远程抓取图片的类,测试了一下,效果还不错分享...2015-10-30
  • Android子控件超出父控件的范围显示出来方法

    下面我们来看一篇关于Android子控件超出父控件的范围显示出来方法,希望这篇文章能够帮助到各位朋友,有碰到此问题的朋友可以进来看看哦。 <RelativeLayout xmlns:an...2016-10-02
  • ps把文字背景变透明的操作方法

    ps软件是现在非常受大家喜欢的一款软件,有着非常不错的使用功能。这次文章就给大家介绍下ps把文字背景变透明的操作方法,喜欢的一起来看看。 1、使用Photoshop软件...2017-07-06
  • php数组操作 键名比较 差集 交集赋值

    本文章提供在量的数据中级操作实例有如对键名比较计算数组的差集 计算差集 给指定数组中插入一个元素 反转数组 交集赋值新的数组实例。 //定义回调函数 funct...2016-11-25
  • C#二维数组基本用法实例

    这篇文章主要介绍了C#二维数组基本用法,以实例形式分析了C#中二维数组的定义、初始化、遍历及打印等用法,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
  • intellij idea快速查看当前类中的所有方法(推荐)

    这篇文章主要介绍了intellij idea快速查看当前类中的所有方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2020-09-02
  • Mysql select语句设置默认值的方法

    1.在没有设置默认值的情况下: 复制代码 代码如下:SELECT userinfo.id, user_name, role, adm_regionid, region_name , create_timeFROM userinfoLEFT JOIN region ON userinfo.adm_regionid = region.id 结果:...2014-05-31
  • C#数组的常用操作方法小结

    Array数组在C#中同样是最基本的数据结构,下面为大家C#数组的常用操作方法小结,皆为细小的代码段,欢迎收看收藏...2020-06-25
  • php curl模拟post请求和提交多维数组的示例代码

    下面一段代码给大家介绍php curl模拟post请求的示例代码,具体代码如下: <&#63;php$uri = "http://www.cnblogs.com/test.php";//这里换成自己的服务器的地址// 参数数组$data = array ( 'name' => 'tanteng'// 'passwor...2015-11-24
  • js导出table数据到excel即导出为EXCEL文档的方法

    复制代码 代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta ht...2013-10-13
  • mysql 批量更新与批量更新多条记录的不同值实现方法

    批量更新mysql更新语句很简单,更新一条数据的某个字段,一般这样写:复制代码 代码如下:UPDATE mytable SET myfield = 'value' WHERE other_field = 'other_value';如果更新同一字段为同一个值,mysql也很简单,修改下where即...2013-10-04
  • ps怎么制作倒影 ps设计倒影的方法

    ps软件是一款非常不错的图片处理软件,有着非常不错的使用效果。这次文章要给大家介绍的是ps怎么制作倒影,一起来看看设计倒影的方法。 用ps怎么做倒影最终效果&#819...2017-07-06
  • js基础知识(公有方法、私有方法、特权方法)

    本文涉及的主题虽然很基础,在许多人看来属于小伎俩,但在JavaScript基础知识中属于一个综合性的话题。这里会涉及到对象属性的封装、原型、构造函数、闭包以及立即执行表达式等知识。公有方法 公有方法就是能被外部访问...2015-11-08
  • 安卓手机wifi打不开修复教程,安卓手机wifi打不开解决方法

    手机wifi打不开?让小编来告诉你如何解决。还不知道的朋友快来看看。 手机wifi是现在生活中最常用的手机功能,但是遇到手机wifi打不开的情况该怎么办呢?如果手机wifi...2016-12-21
  • PHP 验证码不显示只有一个小红叉的解决方法

    最近想自学PHP ,做了个验证码,但不知道怎么搞的,总出现一个如下图的小红叉,但验证码就是显示不出来,原因如下 未修改之前,出现如下错误; (1)修改步骤如下,原因如下,原因是apache权限没开, (2)点击打开php.int., 搜索extension=ph...2013-10-04
  • c#中分割字符串的几种方法

    单个字符分割 string s="abcdeabcdeabcde"; string[] sArray=s.Split('c'); foreach(string i in sArray) Console.WriteLine(i.ToString()); 输出下面的结果: ab de...2020-06-25