PHP foreach zmienia oryginalne wartości tablicy
Jestem zupełnie nowy w wielowymiarowych tablicach, i to mnie męczy.
Moja tablica jest następująca:
$fields = array(
"names" => array(
"type" => "text",
"class" => "name",
"name" => "name",
"text_before" => "name",
"value" => "",
"required" => true,
)
)
Potem dostaĹ 'em funkcjÄ ™ sprawdzajÄ ... cÄ..., czy te wejĹ" cia sÄ ... wypeĹ 'nione, jeĹ" li sÄ ... wymagane.
function checkForm($fields){
foreach($fields as $field){
if($field['required'] && strlen($_POST[$field['name']]) <= 0){
$fields[$field]['value'] = "Some error";
}
}
return $fields;
}
Teraz moim problemem jest ta linia
$fields[$field]['value'] = "Some error";
Chcę zmienić zawartość oryginalnej tablicy, ponieważ zwracam to, ale jak uzyskać nazwę bieżącej tablicy (nazwy w tym przykładzie) w mojej pętli foreach?
5 answers
Polecam wykonanie:
foreach ($fields as $key => $field) {
if ($field['required'] && strlen($_POST[$field['name']]) <= 0) {
$fields[$key]['value'] = "Some error";
}
}
Więc zasadniczo używaj $field
, Gdy potrzebujesz wartości, i $fields[$key]
, gdy musisz zmienić dane.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-09 13:30:21
Użycie &
:
foreach($arr as &$value)
{
$value = $newVal;
}
&
przekazuje wartość tablicy jako odniesienie i nie tworzy nowej instancji zmiennej. Tak więc, jeśli zmienisz odniesienie, oryginalna wartość ulegnie zmianie.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-02-22 12:49:00
Użyj foreach($fields as &$field){
- więc będziesz pracować z oryginalną tablicą.
Tutaj jest więcej o przechodzeniu przez odniesienie.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-02-22 12:48:35
function checkForm(& $fields){
foreach($fields as $field){
if($field['required'] && strlen($_POST[$field['name']]) <= 0){
$fields[$field]['value'] = "Some error";
}
}
return $fields;
}
To jest to, co proponuję przekazać przez odniesienie
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-02-22 12:56:25
Spróbuj tego
function checkForm($fields){
foreach($fields as $field){
if($field['required'] && strlen($_POST[$field['name']]) <= 0){
$field['value'] = "Some error";
}
}
return $field;
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-02-22 12:51:14