2010-02-11 73 views
3

我不明白each()和list()函數的好處。任何人都可以給我多一點細節,並向我解釋它如何有用?each()和list()函數

編輯:

<?php 
$foo = array("bob", "fred", "jussi", "jouni", "egon", "marliese"); 
$bar = each($foo); 
print_r($bar); 
?> 

Array 
(
    [1] => bob 
    [value] => bob 
    [0] => 0 
    [key] => 0 
) 

那麼,這是否意味着數組[1]還有價值鮑勃,但它在陣列[0]顯然?

回答

2

list不是函數本身,因爲它的變量用法截然不同。

假設你有一個數組

$arr = array('Hello', 'World'); 

隨着list,您可以快速分配這些不同的陣列成員變量

list($item1, $item2) = $arr; //$item1 equals 'Hello' and $item2 equals 'World' 
+0

列表如何有用? – Strawberry 2010-02-12 00:05:30

+0

@Doug - 爲一個返回多個值的函數。假設你有一個函數,當傳遞一個文件名時,它將把它的擴展名和MIME類型作爲一個雙元素數組返回。然後,您可以捕獲兩個值,例如'list($ ext,$ mime)= getTypes($ filename);'。 – 2010-02-12 00:12:14

+0

更簡單,不太詳細的數組值提取到本地範圍。 請注意,不幸的是,它只適用於數字索引數組。 – Kzqai 2010-02-12 00:14:30

3

each()函數返回當前元素鍵和值,並向前移動內部指針。 each()

列表功能 - 分配如同它們是通過陣列的陣列 list()

用法示例是用於迭代

while(list($key,$val) = each($array)) 
    { 
     echo "The Key is:$key \n"; 
     echo "The Value is:$val \n"; 

    } 
1

名單是不是函數,它是一種語言結構。它用於將多個值分配給不同的變量。

list($a, $b, $c) = array(1, 2, 3);

現在$a等於1,等等。

每個陣列具有一個指向它的陣列中的一個元件的內部指針。默認情況下,它指向開始。

each從指定數組中返回當前鍵和值,然後將指針移到下一個值。所以,把它們放在一起:

list($key, $val) = each($array);

的RHS是返回一個數組,其中分配給$key$val。 `$ array'中的內部指針被移動到下一個元素。

你會經常看到,在一個循環:

while(list($key, $val) = each($array)): 

它基本上是同樣的事情:

foreach($array as $key => $val): 
0

使用它們一起,基本上,一個早期的方式來遍歷關聯數組,特別是如果你不知道數組鍵的名字。

現在真的沒有理由我不知道只是用foreach來代替。

list()可與each()分開使用,以便將數組的元素分配給更容易讀取的變量。

+0

什麼?除列表外不適用於關聯密鑰,只有數字密鑰。 – Kzqai 2010-02-12 00:15:50

+1

沒錯。它必須與每個()一起使用。 each()使用數組的內部指針,拉取當前數組元素,並創建一個數組,其索引爲0,索引值爲1。 – 2010-02-12 00:18:44

1

爲了回答在第一編輯的問題是:

基本上,PHP是創建與從源陣列中的當前元素的鍵/值對的混合陣列。

因此,您可以通過使用$bar[0]和使用$bar[1]的值來獲得密鑰。或者,您可以使用$bar['key']和使用$bar['value']的值獲取密鑰。它始終是來自源數組的唯一鍵/值對,它只是爲您提供訪問實際鍵和實際值的兩種不同途徑。

1

假設你有一個多維數組:

+---+------+-------+ 
|ID | Name | Job | 
| 1 | Al | Cop | 
| 2 | Bob | Cook | 
+---+------+-------+

你可以這樣做:

<?php 
while(list($id,$name,$job) = each($array)) { 
    echo "<a href=\"profile.php?id=".$id."\">".$name."</a> is a ".$job; 
} 
?> 
2

一個非常常見的例子爲list思考CSV文件時。想象一下,你有存儲爲CSV與列idtitletext一個簡單的數據庫,這樣的文件可能是這樣的:

1|Foo|Lorem ipsum dolor| 
2|Bar|sit amet| 
... 

現在,當你分析這個文件,你可以像這樣做,使用list功能:

$lines = file('myFile.csv'); 
for ($i = 0; $i < count($lines); $i++) 
{ 
    list($id, $title, $text, $null) = explode('|', $lines[$i], 4); 
    echo "Id: $id, Title: $title\n$text\n\n"; 
} 

其他功能,each,基本上是通過陣列走,使用內部指針的老辦法。更常見的方法是現在使用foreach

2

編輯:它可能是值得一提的是,each已棄用

警告:此功能已被棄用的PHP 7.2.0的。依託這個功能是非常氣餒


讓我們先來看看each():它返回當前值(在第一這是$array[0 | "first value in association array ]所以

$prices = ('x'=>100 , 'y'=>200 , 'z'= 300); 

說我想遍歷這些陣列,而不使用一個foreach循環。

while($e = each($prices)){ 
    echo $e[key] . " " . $e[value] . "<br/>" ; 
} 

當每個到達點處會導致 while循環終止非現有的元件。 當您撥打each()時,它會爲您提供一個陣列,其中包含四個值和陣列位置的四個索引。位置「鍵」和0包含當前元素的鍵,位置「值」和1包含值 的當前元素。

所以這個循環將列出陣列的每個鍵的空間和值,那麼

其次讓我們來看看list()。 它基本上會做同樣的事情與「價值」和「關鍵」的更名雖然它是在結合使用each()

while(list($k , $v) = each($prices)){ 
    echo $k /*$e[key]*/ . " " . $v /*$e[value]*/ . "<br/>" ; 
    } 
每次返回一個數組

所以簡而言之each()迭代陣列上。 list()重命名要在循環內部使用的數組的鍵值對。

注意:reset($prices)

復位each()指針該陣列爲第一元件。