arrays - PHP foreach中“as $ key=>$ value”和“as $ value”之間的區別



(7)

我有一個數據庫調用,我試圖找出foreach循環中$key => $value作用。

我問的原因是因為這兩個代碼輸出相同的東西,所以我試圖理解為什麼它是這樣編寫的。 這是代碼:

foreach($featured as $key => $value){
  echo $value['name'];
}

這輸出相同:

foreach($featured as $value) {
  echo $value['name']
}

所以我的問題是, $key => $valueforeach循環中只有$value之間的區別是什麼。 該數組是多維的,如果這有所不同,我只想知道為什麼在foreach循環中將$key傳遞給$value


Answers

需要提到一個非常重要的地方,它需要foreach循環中使用key => value對。 假設您要在$features數組中向現有項( 在另一個鍵中 )添加新的/子元素。 您應該執行以下操作:

foreach($features as $key => $feature) {
    $features[$key]['new_key'] = 'new value';  
} 


而不是這個:

foreach($features as $feature) {
    $feature['new_key'] = 'new value';  
} 

這裡的最大區別在於,在第一種情況下,您通過主數組本身訪問數組的子值,並使用當前由數組指針指向的元素的

在第二個( 它不能用於此目的 )中,您將數組中的子值分配給臨時變量$feature ,該$feature在每次循環迭代後都未設置。


區別在於

foreach($featured as $key => $value){
 echo $value['name'];
}

您可以從其鍵值對中操縱每個迭代的$key key的值。 就像@djiango回答一樣,如果你沒有操縱每個值的$key ,那麼循環的結果將完全相同

foreach($featured as $value) {
  echo $value['name']
}

來源:您可以從PHP文檔中讀取它:

第一個表單循環遍歷array_expression給出的數組。 在每次迭代中,當前元素的value>被賦值為$ value,內部數組指針被提前> 1(因此在下一次迭代中,您將看到下一個元素)。*

第二種形式還將在每次迭代時將當前元素的鍵分配給$ key變量。

如果您正在操作的數據是具有自定義鍵的數組,則可以將它們打印到屏幕,如下所示:

$array = ("name" => "Paul", "age" => 23);

foreach($featured as $key => $value){
 echo $key . "->" . $value;
}

應打印:

name->Paul

age->23

並且你不能用foreach($featured as $value)同樣輕鬆地做到這一點。 因此,請考慮上面的格式,以便在需要時操作鍵。

乾杯


假設您有一個這樣的數組:

$array = (0=>'123',1=>'abc','test'=>'hi there!')

在你的foreach循環中,每個循環將是:

$key = 0, $value = '123'
$key = 1, $value = 'abc'
$key = 'test', $value = 'hi there!'

當你需要知道數組密鑰時,這非常棒。


好吧,foreach循環中的$key => $value是指關聯數組中的鍵值對,其中鍵用作確定值的索引,而不是像0,1,2,...等數字。 PHP,關聯數組看起來像這樣:

$featured = array('key1' => 'value1', 'key2' => 'value2', etc.);

在PHP代碼中: $featured是循環的關聯數組,並且as $key => $value表示每次循環運行並從數組中選擇鍵值對時,它將鍵存儲在本地$key要在循環塊內使用的變量和本地$value變量中的$value 。 因此,對於上面的示例數組,foreach循環將到達第一個鍵值對,如果指定as $key => $value ,則它將'key1'存儲在$key變量中,將'value1'$value變量。

由於您不在循環塊中使用$key變量,添加或刪除它不會改變循環的輸出,但最好包括鍵值對以顯示它是一個關聯數組。

另請注意, as $key => $value指定是任意的。 您可以用as $foo => $bar替換它,只要您將循環塊中的變量引用更改為新變量$foo$bar ,它就可以正常工作。 但是,將它們設為$key$value有助於跟踪它們的含義。


這裡$ key將包含與$ features中的$ value相關聯的$ key 。 不同的是,現在你有了這把鑰匙。

array("thekey"=>array("name"=>"joe"))

這裡$ value

array("name"=>"joe")

$ key是“ 鑰匙


假設您有一個像這樣的關聯數組:

$a = array(
    "one" => 1,
    "two" => 2,
    "three" => 3,
    "seventeen" => array('x'=>123)
);

在第一次迭代中: $key="one"$value=1

有時您需要此密鑰,如果您只想要該值,則可以避免使用它。

在最後一次迭代中: $key='seventeen'$value = array('x'=>123)因此要獲得此array值中第一個元素的值,您需要一個key ,在這種情況下$value['x'] =123 x: $value['x'] =123


使用原型繼承簡單而快速地解決此問題:

Array.prototype.sortBy = function(p) {
  return this.slice(0).sort(function(a,b) {
    return (a[p] > b[p]) ? 1 : (a[p] < b[p]) ? -1 : 0;
  });
}

示例/用法

objs = [{age:44,name:'vinay'},{age:24,name:'deepak'},{age:74,name:'suresh'}];

objs.sortBy('age');
// Returns
// [{"age":24,"name":"deepak"},{"age":44,"name":"vinay"},{"age":74,"name":"suresh"}]

objs.sortBy('name');
// Returns
// [{"age":24,"name":"deepak"},{"age":74,"name":"suresh"},{"age":44,"name":"vinay"}]

更新:不再修改原始數組。





php arrays foreach