2016-04-19 12 views
7

Sono nuovo nella programmazione e ho appena iniziato il php come due mesi fa. Finora mi sembrava di capirlo sempre di più. Ma ora sono perplesso. Ho un ciclo foreach che non passerà attraverso l'array che sto alimentando. Ho controllato la sintassi e la logica più e più volte e non riesco a trovare il problema. Probabilmente sto facendo qualcosa di stupido, ma ho bisogno del tuo aiuto per scoprire di cosa si tratta.PHP foreach non looping

Questo codice fa parte di uno script per consentire a un utente che ha effettuato l'accesso di modificare le proprie informazioni personali. Metto i dati da $_POST in un array ed alimentarli (con la session_user_id) al mio funzione 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); 
} 

Ho verificato se $gegevens è in realtà un array ed è; quando ho print_r($gegevens) ricevo il seguente output (questo è un array associativo, giusto?):

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

Così le informazioni vengono inviate alla mia funzione wijzig_gegevens(). Quando eseguo il $gegevens$gegevens e il mio codice primario , viene visualizzato lo stesso array di cui sopra. Quindi $gegevens arriva in wijzig_gegevens() ed è ancora un array.

Quindi il wijzig_gegevens() dovrebbe fare la sua parte. Alla fine dovrebbe aggiornare il database, ma per ora I/m sta solo cercando di farlo produrre le coppie chiave/valore dall'array. Ecco la funzione:

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

mi aspettavo che il foreach per visualizzare 3 set di coppie chiave/valore. Ma per qualche ragione viene visualizzato solo il primo coppia chiave/valore:

voornaamMarieke 

Questo mi è stato sconcertante per più di un giorno all'altro, in modo da sto sperando che qualcuno possa aiutarmi a trovare il mio errore.

+9

You' ho ottenuto un 'return' all'interno di un ciclo. Quando colpisce il 'return', è tutto. La chiamata alla funzione è finita. Invece di 'return', potresti usare' echo'. Ma non dovresti davvero "echo" da una funzione (dipendente). Quindi è possibile concatenare una variabile e restituire * dopo * il ciclo 'foreach'. –

+7

Dovresti veramente scrivere il codice in inglese lol: D – DanFromGermany

+1

Ottimo lavoro nel dichiarare il problema e le tue osservazioni molto chiaramente. – mwittrock

risposta

10

Hai appena ritorna il primo valore del ciclo nel codice Avete bisogno un array per memorizzare tutto il valore della chiave del ciclo foreach come

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

e si ottiene il tuo valore di ritorno come

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