为什么这个PHP代码只是回显"数组"?

Kar*_*rem 3 php arrays

这是我的代码:

if(isset($_POST['check']) AND $_POST['check'] == 'First') {
  $errormessage = array();

  if(empty($_POST['full_name']) || strlen($_POST['full_name']) < 4) { 
     $errormessage[] = "FEL - Vänligen ange fullständiga namn. Please enter atleast 3 or more characters for your name";
  }
  if(!isEmail($_POST['usr_email'])) {
     $errormessage[] = "FEL - Invalid email address.";
  }
  if(empty($errormessage)) {
     echo 1;
  } else { 
     echo $errormessage; // <--
  }
}
Run Code Online (Sandbox Code Playgroud)

echo $errormessage运行它输出Array.我究竟做错了什么?

Jac*_*kin 27

您正在调用echo一个实际数组,该数组没有隐式字符串表示形式.

为了输出数组的内容,您可以使用print_r,var_dumpvar_export函数或自定义输出,您可以使用array_map甚至foreach循环:

print_r($errormessage);
var_dump($errormessage);
var_export($errormessage);

foreach($errormessage as $error) 
   echo $error . '<br/>';

array_map('echo', $errormessage);
Run Code Online (Sandbox Code Playgroud)

  • 或者`var_dump`或者如果你想拥有数组代码`var_export`. (9认同)

Gum*_*mbo 7

$errormessage是一个数组,并echo在数组上使用打印Array.

如果要以合适的方式打印错误消息,可以使用foreach迭代消息并打印每条消息:

echo '<ul>';
foreach ($errormessage as $message) {
    echo '<li>'.htmlspecialchars($message).'</li>';
}
echo '</ul>';
Run Code Online (Sandbox Code Playgroud)

或者你甚至可以使用一些先进的阵列处理像array_mapimplode做这样的事情,它等效于先前所示,当阵列包含至少一个项目:

echo '<ul><li>' . implode('</li><li>', array_map('htmlspecialchars', $errormessage)) . '</li></ul>';
Run Code Online (Sandbox Code Playgroud)