Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在php中将数组转换为对象_Php_Oop_Variables - Fatal编程技术网

在php中将数组转换为对象

在php中将数组转换为对象,php,oop,variables,Php,Oop,Variables,在php中,我将发布的数据从表单转换为如下对象: <?php ...some code... $post = new stdClass; foreach ($_POST as $key => $val) $post->$key = trim(strip_tags($_POST[$key])); ?> <?php $colors = $_POST['color_type']; if(empty($colors))

在php中,我将发布的数据从表单转换为如下对象:

<?php

...some code...

    $post = new stdClass;

    foreach ($_POST as $key => $val)
        $post->$key = trim(strip_tags($_POST[$key]));

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

然后在我的页面中,我只回显如下所示的发布数据:

<?php echo $post->Name; ?>
<?php echo $post->Address; ?>

等等

这很好,但我有多个复选框,它们是一个组的一部分,我重复了结果,如下所示:

<?php

...some code...

    $post = new stdClass;

    foreach ($_POST as $key => $val)
        $post->$key = trim(strip_tags($_POST[$key]));

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


当我只使用数组时,它就起作用了,但我如何将其作为对象语法编写呢?

为什么要这样?数组有什么问题

使用面向对象编程,这可能正是您想要的。通过创建一个名为
Color
的类并执行
$colors[$i]=newcolor(),将其视为一个对象

通过这种方式,您可以对其执行任何操作,并向其添加函数。

使用您的代码

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;
    }
}

非常简单——当您将
颜色类型
键附加到对象时,它将成为一个数组,它是对象的一个属性。这很可能是您想要的:您可能不想将该数组转换为它自己的基于
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;
        }
    }
?>

这听起来更接近我想要的。我的页面已经按照我想要的方式工作了,它获取了所有发布的数据,并按照
的描述在页面上进行了回显。但是,我不知道如何以与发布的其他信息相同的对象格式获取复选框组。但是,我保持计数,因为用户可能选择多个选项,并且大约有20个选项。此外,当输出显示在页面上时,它是以逗号分隔的(我希望如此)。我还没有尝试你的解决方案,但这对我来说仍然有效吗?我对php非常陌生。。。所以我希望有一种我能理解的方法,就是把我在原始问题的第二部分中解释过的,当它作为一个数组发布时起作用的,而不是使它像其他被回响的信息一样成为对象。类似于
的东西显然不起作用……但我希望它是沿着这些思路。要回答逗号分隔的问题,那真的很容易。只需扔掉
for
循环,用
回声内爆(“,”,$colors)替换它即可--第一个参数是粘合(在本例中是逗号和空格),第二个参数是要“内爆”的数组(或将所有元素粘合到一个字符串中)。有什么特别的原因需要颜色成为一个或多个对象,而不仅仅是一个数组?数组通常更容易操作。