2013-08-28 59 views
35

Tôi có cuộc gọi cơ sở dữ liệu và tôi đang cố gắng tìm ra những gì $key => $value thực hiện trong vòng lặp foreach.

Lý do tôi hỏi là vì cả hai mã này đều xuất ra cùng một thứ, vì vậy tôi đang cố gắng hiểu tại sao mã được viết theo cách này. Dưới đây là các mã:

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

này kết quả đầu ra giống như:

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

Vì vậy, câu hỏi của tôi là, sự khác biệt giữa $key => $value hay chỉ $value trong foreach vòng lặp là gì. Mảng là đa chiều nếu điều đó tạo nên sự khác biệt, tôi chỉ muốn biết tại sao phải vượt qua $key đến $value trong vòng lặp foreach.

+0

Đọc về [mảng PHP] (http://php.net/manual/en/language.types.array.php) và [foreach] (http://php.net/manual/en/control-structures .foreach.php). Trong ví dụ của bạn, bạn không sử dụng '$ key' bên trong foreach, vì vậy bạn cũng có thể đi cho phiên bản đơn giản hơn. –

+0

Đây là những gì mảng trả về: 'Array ( [0] => Array ([id] => 7 [name] => Giày 2 [thumbnail] => /images/dummy-thumb.jpg) [1] => Array ([id] => 1 [name] => Game 1 [thumbnail] => /images/dummy-thumb.jpg) [2] => Mảng ([id] => 9 [tên] => Áo 2 [thumbnail] => /images/dummy-thumb.jpg) ) 'Phím' $' là '[0] [1] [2]' và '$ value' là' [id] [tên] [thumbnail] 'đúng không? – handmdmr

Trả lời

56

Vâng, $key => $value trong vòng lặp foreach đề cập đến cặp khóa-giá trị trong mảng kết hợp , trong đó khóa đóng vai trò là chỉ mục để xác định giá trị thay vì một số như 0,1,2, ... Trong PHP, mảng kết hợp trông giống như sau:

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

Trong đoạn code PHP: $featured là mảng kết hợp được looped qua, và as $key => $value có nghĩa là mỗi lần vòng lặp chạy và chọn một cặp khóa-giá trị từ mảng, nó lưu trữ quan trọng trong việc biến $key địa phương sử dụng bên trong khối vòng lặp và giá trị trong biến số địa phương $value. Vì vậy, đối với mảng ví dụ trên, vòng lặp foreach sẽ tiếp cận cặp khóa-giá trị đầu tiên và nếu bạn đã chỉ định as $key => $value, nó sẽ lưu trữ 'key1' trong biến số $key'value1' trong biến số $value.

Vì bạn không sử dụng biến số $key bên trong khối vòng lặp của bạn, thêm hoặc xóa nó không thay đổi đầu ra của vòng lặp, nhưng tốt nhất nên bao gồm cặp khóa-giá trị để cho biết rằng đó là mảng kết hợp .

Cũng lưu ý rằng chỉ định as $key => $value là tùy ý. Bạn có thể thay thế bằng as $foo => $bar và nó sẽ hoạt động tốt miễn là bạn đã thay đổi các tham chiếu biến trong khối vòng lặp thành các biến mới, $foo$bar. Nhưng làm cho chúng $key$value giúp theo dõi ý nghĩa của chúng.

+3

Cảm ơn bạn, Đây là câu trả lời tôi đang tìm kiếm. Nó chỉ gây nhầm lẫn cho tôi khi tôi thấy nó được sử dụng theo cách này mà không sử dụng '$ key' bên trong khối vòng lặp. Chỉ cần sử dụng nó để đại diện cho rằng đó là một mảng kết hợp. Tôi hiểu cách vòng lặp và mảng hoạt động. Chỉ cần không phải lý do tại sao nó được sử dụng theo cách này mà không sử dụng biến '$ key'. Tôi đã được rối tung xung quanh với nó bằng cách sử dụng '$ key' var để xem những gì nó trả về. Cảm ơn bạn lần nữa :) – handmdmr

+0

không sao cả! mừng vì tôi có thể giúp. – djiango

1

đây $ key sẽ chứa $ key gắn liền với $ value trong $ đặc trưng. Sự khác biệt là bây giờ bạn có chìa khóa đó.

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

đây $ value

array("name"=>"joe") 

$ key là "thekey"

3

Giả sử bạn có một mảng như thế này:

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

Trong vòng lặp foreach của bạn, mỗi vòng sẽ là:

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

Thật tuyệt vời cho những lần khi bạn cần phải biết phím mảng.

+0

Vì vậy, chúng tôi thiết lập vòng lặp theo cách này chỉ trong trường hợp chúng ta cần phải biết '$ key' Làm cho cảm giác vì đây là từ một hàm trong mô hình trong codeigniter.Vì vậy, có thể cần '$ key' sau đó. – handmdmr

+0

Chính xác. Bạn cũng có thể sử dụng phím để thay đổi giá trị của khóa đó trong mảng hoặc sử dụng khóa để thêm dữ liệu vào mảng khác bằng cách sử dụng cùng một khóa. – aynber

2

nếu mảng trông giống như:

  • $ nổi bật [ "quả"] = "màu da cam";
  • $ đặc trưng ["quả"] = "chuối";
  • $ đặc trưng ["rau"] = "cà rốt";

các $ key sẽ tổ chức các loại (trái cây hoặc rau) cho mỗi giá trị mảng (cam, chuối hoặc cà rốt)

14

Hãy nói rằng bạn có một mảng kết hợp như thế này:

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

Trong lần lặp đầu tiên: $key="one"$value=1.

Đôi khi bạn cần khóa này, nếu bạn chỉ muốn giá trị, bạn có thể tránh sử dụng nó.

Trong phiên cuối: $key='seventeen'$value = array('x'=>123) như vậy để nhận được giá trị của phần tử đầu tiên trong giá trị array này, bạn cần một key, x trong trường hợp này: $value['x'] =123.

+0

Bạn chỉ cần làm cho bóng đèn đó bật lên trong đầu của tôi, Cảm ơn :) – handmdmr

+0

hãy đánh dấu câu trả lời này là đã giải quyết, cảm ơn :) –

+0

Tôi thích lời giải thích này, nhưng thay vì muốn giá trị tôi muốn biết chìa khóa thì sao? – Nmaster88

5

Sự khác biệt là trên

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

bạn có thể thao tác các giá trị của mỗi lần lặp của $key từ cặp khóa-giá trị của họ. Giống như @djiango trả lời, nếu bạn không thao tác mỗi giá trị của $key, kết quả của các vòng lặp sẽ được chính xác giống như

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

Nguồn: Bạn có thể đọc nó từ PHP Documentation:

Vòng lặp biểu mẫu đầu tiên trên mảng được array_expression đưa ra. Trên mỗi lần lặp, giá trị> của phần tử hiện tại được gán cho giá trị $ và con trỏ mảng nội bộ được nâng cao bởi> một (vì vậy trong lần lặp tiếp theo, bạn sẽ xem xét phần tử tiếp theo). *

biểu mẫu thứ hai sẽ bổ sung gán khóa của phần tử hiện tại cho biến $ key trên> mỗi lần lặp.


Nếu dữ liệu bạn đang thao tác là, nói, mảng với các phím tùy chỉnh, bạn có thể in chúng để sàng lọc như vậy:

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

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

nên in:

name->Paul

age->23

Và bạn sẽ không thể thực hiện việc đó với số foreach($featured as $value) dễ dàng như vậy. Vì vậy, hãy xem xét định dạng trên một cách thuận tiện để thao tác các phím khi cần.

Cheers

+0

Cậu bé có ý nghĩa hơn bất kỳ câu trả lời nào, bây giờ tôi có toàn bộ ý tưởng đằng sau điều này: D cũng ít nhất là loại: D Sống lâu và thịnh vượng bạn tôi –

8

Một nơi rất quan trọng nó ở đâu REQUIRED sử dụng key => value cặp trong foreach vòng lặp là được đề cập. Giả sử bạn muốn thêm mới/sub -hoặc vào một mục hiện có (trong khóa khác) trong mảng $features. Bạn nên làm như sau:

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


Thay vì điều này:

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

Các lớn khác biệt ở đây là, trong trường hợp đầu tiên mà bạn đang truy cập vào tiểu giá trị của mảng thông qua chính bản thân mảng với phím thành phần tử hiện đang được trỏ tới bởi con trỏ mảng.

Trong khi ở giây thứ hai (không hoạt động cho mục đích này), bạn chỉ định giá trị phụ trong mảng cho biến tạm thời $feature không được đặt sau mỗi lần lặp vòng lặp.

Các vấn đề liên quan