在php中将数组转换为对象

时间:2011-10-17 22:36:32

标签: php oop variables

在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] . ", ");
    }
  }
?>

当我只使用数组时,这是有效的,但我如何将其写为对象语法?

3 个答案:

答案 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代码)。