首页 > 编程技术 > php

二种遍历关联数组的方法

发布时间:2016-11-25 15:09

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--]

您可能感兴趣的文章: