【问题标题】:From Object To Human Readable Text [closed]从对象到人类可读文本[关闭]
【发布时间】:2013-01-13 18:37:13
【问题描述】:

我正在开发一个将对象转换为字符串的小函数。如果对象具有作为数组的值,这很容易。但我希望这个函数能够工作,即使我的对象或数组有一些值作为另一个对象或数组。我把它弄得很粗糙,所以请专家帮忙,让每个人都整洁。

我的功能:

function makeString($array)
{
    $outval = "";  
    foreach($array as $key=>$value) {
        if (is_object($value)) {
            $arr = array();
            $arr = get_object_vars($value);

            foreach($arr as $key1=>$value1){
                if(is_array($value1)) { 
                    $outval .= "\t\t$key1\n"; 
                    $outval .= makeString($value1);
                }  
                else {
                    $outval .= "\t$key1: $value1\n";
                } 

            }
        }
        if(is_array($value)) { 
            $outval .= "\t$key\n"; 
            $outval .= makeString($value);
        }  
        else {
            $outval .= "$key: $value\n";
        }  
    } 
    return $outval;  
}  

这部分在我的函数中重复出现:

...
    if (is_object($value)) {
        $arr = array();
        $arr = get_object_vars($value);

        foreach($arr as $key1=>$value1){
            if(is_array($value1)) { 
                $outval .= "\t\t$key1\n"; 
                $outval .= makeString($value1);
            }  
            else {
                $outval .= "\t$key1: $value1\n";
            } 

        }
    }
...

如果这里的 $value1 也是一个对象呢?即使我的对象在主对象中有许多其他对象或数组,我应该怎么做才能使这个函数工作。

【问题讨论】:

  • 你为什么要这样做而不是只使用 json_encode?您还重新实现了一个内置函数:__toString
  • 我刚刚尝试了 json_encode,但它返回的内容无法写入文件。谢谢你,但忘了它,伙计。人们认为这不是一个普遍的问题。所以..

标签: php arrays string object human-readable


【解决方案1】:

您的函数存在一个缺陷,该缺陷来自您的一个假设:该函数将传递一个数组。但是,正如您所发现的,这并不能保证。

因此,设计这样一个函数的更好方法是假设任何关于输入的内容,然后像这样重构你的函数:

function makeString( $value) {
    if( is_object( $value)) { }
    else if( is_array( $value)) { }
    else if( is_string( $value) || is_numeric( $value)) { }
    else { } // Resource, etc.
}

【讨论】:

  • 好的,但是我在处理 Xen API 时需要这个函数。它有一些变量作为对象。我正在研究它,变量内部还有另一个对象或数组作为值。所以我需要一些可以将整个对象转换为人类可读文本的东西。
  • 这很好,但你必须写它。没有人会为您编写整个函数。我已经向您展示了您需要如何重组您的函数以使其正常工作,现在您必须放入递归并完成该函数。
  • 好的,谢谢!我刚刚看到互联网上没有满足这种需求的样本,如果我们可以在这里放置一个精心设计的样本,很多人都会使用它。那个粗略的功能已经对我有用了。
猜你喜欢
  • 2014-09-18
  • 1970-01-01
  • 2013-05-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-06
相关资源
最近更新 更多