2016-04-19 15 views
7

Tôi mới trong lập trình và chỉ mới bắt đầu php như hai tháng trước. Cho đến nay tôi dường như hiểu nó nhiều hơn và nhiều hơn nữa. Nhưng bây giờ tôi đang bối rối. Tôi có một vòng lặp foreach mà sẽ không lặp qua mảng tôi đang ăn nó. Tôi đã kiểm tra cú pháp và logic lặp đi lặp lại và không thể tìm thấy vấn đề. Tôi có thể làm điều gì đó ngu ngốc, nhưng tôi cần sự giúp đỡ của bạn để tìm ra nó là gì.PHP foreach không looping

Mã này là một phần của tập lệnh để cho phép người dùng đã đăng nhập thay đổi thông tin cá nhân của anh ấy. Tôi đặt dữ liệu từ $_POST trong một mảng và thức ăn nó (với session_user_id) để chức năng của tôi wijzig_gegevens():

if (empty($_POST) === false && empty($errors) === true) { 
$gegevens = array(
    'voornaam' => $_POST['voornaam'], 
    'achternaam' => $_POST['achternaam'], 
    'emailadres' => $_POST['emailadres'] 
); 
wijzig_gegevens($session_gebruiker_id, $gegevens); 
} 

Tôi đã kiểm tra nếu $gegevens thực sự là một mảng và nó là; khi tôi tôi print_r($gegevens) nhận được đầu ra sau (đây là một mảng kết hợp, phải không?):

Array ([voornaam] => Marieke [achternaam] => Schut [emailadres] => [email protected]) 

Vì vậy, các thông tin sẽ được gửi đến chức năng của tôi wijzig_gegevens(). Khi tôi thực hiện wijzig_gegevens() trả lại $gegevens và mã chính của tôi print_r(wijzig_gegevens()), nó sẽ hiển thị chính xác cùng một mảng như trên. Vì vậy, $gegevens đến trong wijzig_gegevens() và vẫn là một mảng.

Vì vậy, sau đó, wijzig_gegevens() nên thực hiện phần của nó. Cuối cùng nó sẽ cập nhật cơ sở dữ liệu, nhưng hiện tại tôi chỉ cố gắng để có được nó để tạo ra các cặp khóa/giá trị từ mảng đó. Đây là chức năng:

function wijzig_gegevens($gebruiker_id, $gegevens) { 
    global $db; 
    $gebruiker_id = (int)$gebruiker_id; 
    foreach($gegevens as $key => $value) { 
    return $key.$value; 
    } 
} 

Tôi mong đợi foreach để hiển thị 3 bộ cặp khóa/giá trị. Nhưng đối với một số lý do nó chỉ hiển thị các cặp khóa/giá trị đầu tiên:

voornaamMarieke 

này đã được đánh đố tôi trong hơn một ngày nay, vì vậy tôi hy vọng ai đó có thể giúp tôi tìm sai lầm của tôi.

+9

Bạn' đã có 'return' trong vòng lặp. Khi nó chạm vào 'return', đúng vậy. Cuộc gọi hàm kết thúc. Thay vì 'return', bạn có thể sử dụng' echo'. Nhưng bạn không nên thực sự 'echo' từ một hàm (phụ thuộc). Vì vậy, bạn có thể nối vào một biến và trả về là * sau * vòng lặp 'foreach'. –

+7

Bạn thực sự nên viết mã bằng tiếng Anh lol: D – DanFromGermany

+1

Công việc tuyệt vời về nêu rõ vấn đề và quan sát của bạn rất rõ ràng. – mwittrock

Trả lời

10

Bạn chỉ trả lại giá trị đầu tiên của vòng lặp trong mã của bạn .Bạn cần một mảng để lưu trữ toàn bộ giá trị quan trọng của vòng lặp foreach như

$array=array();// define your array 
foreach($gegevens as $key => $value) { 
    $array[]=$key.$value; 
} 
return $array;// return array 

Và bạn sẽ có giá trị trả về của bạn như

$data=wijzig_gegevens($session_gebruiker_id, $gegevens); 
print_r($data);