在php中,我将发布的数据从表单转换为如下对象:
<?php
...some code...
$post = new stdClass;
foreach ($_POST as $key => $val)
$post->$key = trim(strip_tags($_POST[$key]));
?>
然后在我的页面中,我只回显这样的发布数据:
<?php echo $post->Name; ?>
<?php echo $post->Address; ?>
等...
这样可以正常工作,但我有多个复选框是组的一部分,我回应了结果,如下所示:
<?php
$colors = $_POST['color_type'];
if(empty($colors))
{
echo("No color Type Selected.");
}
else
{
$N = count($colors);
for($i=0; $i < $N; $i++)
{
echo($colors[$i] . ", ");
}
}
?>
当我只使用数组时,这是有效的,但我如何将其写为对象语法?
答案 0 :(得分:3)
使用您的代码
function array_to_object($arr) {
$post = new stdClass;
foreach ($arr as $key => $val) {
if(is_array($val)) {
$post->$key = post_object($val);
}else{
$post->$key = trim(strip_tags($arr[$key]));
}
}
return $post;
}
$post = array_to_object($_POST);
或更复杂的解决方案
function arrayToObject($array) {
if(!is_array($array)) {
return $array;
}
$object = new stdClass();
if (is_array($array) && count($array) > 0) {
foreach ($array as $name=>$value) {
$name = strtolower(trim($name));
if (!empty($name)) {
$object->$name = arrayToObject($value);
}
}
return $object;
}
else {
return FALSE;
}
}
来自http://www.richardcastera.com/blog/php-convert-array-to-object-with-stdclass
答案 1 :(得分:0)
使用面向对象的编程,这可能是您正在寻找的。通过创建一个名为Color
的类并执行$colors[$i] = new Color();
通过这种方式,您可以随意使用它,并为其添加功能。
答案 2 :(得分:0)
非常简单 - 当您将color_type
键附加到对象时,它将成为一个属性对象的数组。这很可能是你想要的:你可能不希望将该数组转换为它自己的基于stdClass
的对象,因为那时你将无法迭代所有的值(很容易)。这是一个片段:
<?php
// putting in both of these checks prevents you from throwing an E_WARNING
// for a non-existent property. E_WARNINGs aren't dangerous, but it makes
// your error messages cleaner when you don't have to wade through a bunch
// of E_WARNINGS.
if (!isset($post->color_type) || empty($post->color_type)) {
echo 'No colour type selected.'; // apologies for the Canadian spelling!
} else {
// this loop does exactly the same thing as your loop, but it makes it a
// bit more succinct -- you don't have to store the count of array values
// in $N. Bit of syntax that speeds things up!
foreach ($post->color_type as $thisColor) {
echo $thisColor;
}
}
?>
希望这有帮助!当然,在现实环境中,您需要进行各种数据验证和清理 - 例如,您需要检查浏览器是否实际传递了$_POST['color_type']
的值数组,并且你想要清理输出以防有人试图在你的页面中注入一个漏洞(通过转echo htmlspecialchars($thisColor);
- 这会将所有字符如&lt;和&gt;转换为HTML实体,这样他们就无法插入JavaScript代码)。