簡體   English   中英

使用OOP PHP遍歷關聯數組

[英]loop through an associative array using OOP PHP

<?php

class Validate
{
public $errors = array();

public function date($date)
{
    if(!strtotime($date))
    {
        $errors['date'] = "$date is not a valid date."; 
        //var_dump($errors);
    } else {
        return $date;
    }
}



public function get_errors()
{
    foreach($this->errors as $error => $val)
    {
        return $val."<br />\n";
    }

}



}


$validate = new Validate;
$validate->date('<20 Feb, 2013');
print $validate->get_errors();

它應該遍歷$errors它們打印到瀏覽器中。 沒有。 我肯定知道$errors數組是通過以下語句初始化的:

var_dump($errors);

印刷:

array(1) { ["date"]=> string(34) "<20 Feb, 2013 is not a valid date." } 

到屏幕。 我想念什么?

我嘗試過各種形式的foreach構造:

foreach($this->errors as $this->error => $val)
    {
        return $val."<br />\n";
    }

foreach($this->errors as $this->error => $this->val)
    {
        return $this->val."<br />\n";
    }

但是沒有喜悅!

首先,您必須將錯誤消息分配給$this->error而不是$error

public function date($date) {
    if(!strtotime($date)) {
        $this->errors['date'] = "$date is not a valid date."; 
    } else {
        return $date;
    }
}

其次,您將從錯誤數組中返回第一個錯誤( return $val."<br />\\n"; )。 您可以使用array_value函數從數組中獲取所有值:

public function get_errors() {
    return implode('<br />', array_values($this->errors));
}
// ...
print $validate->get_errors();

一個函數只能返回一次。 您無法循環並返回整個數組,因此最好一次返回整個數組:

public function get_errors()
{
  return $this->errors;
}

然后將其完全輸出到其他地方:

foreach($validate->get_errors() as $error => $val) {
  echo $val . "<br />"; // echo is the output command
}

或對其進行調試:

var_dump($validate->get_errors());

你也可以說

public function get_errors() {
  return implode('<br>', $this->errors);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM