【问题标题】:PHP: Trim every element in an object and if empty, set to N/APHP:修剪对象中的每个元素,如果为空,则设置为 N/A
【发布时间】:2010-08-04 13:05:40
【问题描述】:

我有一个对象:

stdClass Object
(
    [Color] => Red
    [Shape] => Round
    [Taste] => Sweet
)

我想修剪对象中的每个元素,如果该元素为空,请将其设置为“N/A”

所以这个对象:

stdClass Object
(
    [Color] => Red
    [Shape] => 
    [Taste] => Sweet
)

会变成这样:

stdClass Object
(
    [Color] => Red
    [Shape] => N/A
    [Taste] => Sweet
)

我应该如何做到这一点,array_walk 可能吗?

【问题讨论】:

  • array_* 函数通常用于数组,而不是对象。然而,在这种情况下,你中了大奖——array_walk(_recursive)array_key_exists 是唯一可以处理对象的。所以,是的,你可以使用array_walk

标签: php arrays object trim


【解决方案1】:

让我们保持简单:

$foo = new StdClass;
$foo->prop1 = '   foo   ';
$foo->prop2 = NULL;
$foo->prop3 = 'bar';

foreach($foo as &$prop) {
    $prop = trim($prop);
    if (empty($prop)) {
        $prop = 'N/A';
    }
}

print_r($foo);

这将给出:

stdClass Object
(
    [prop1] => foo
    [prop2] => N/A
    [prop3] => bar
)

【讨论】:

  • 我希望他的对象实际上是stdClass 类型,因为如果这只是一个例子,他可能会遇到这种方法的麻烦。
  • @Artefacto 是的,确实如此。在缺乏进一步信息的情况下,我假设 OP 确实有 stdClass 对象,如图所示。
  • 有问题的对象确实是 st​​dClass 类型
  • @Artefacto 为下面的任意对象添加了解决方案。
  • 这是元素,对象属性呢?如果我有像 $obj->{' prop1'} = "value1" 这样的空格的对象属性,并且我还必须修剪属性,如何与修剪值一起执行此操作?
【解决方案2】:

这是一种更复杂(也更慢)的方法,它允许您迭代对象的所有属性,而不管可见性如何。这需要 PHP5.3:

function object_walk($object, $callback) {

    $reflector = new ReflectionObject($object);
    foreach($reflector->getProperties() as $prop) {
        $prop->setAccessible(TRUE);
        $prop->setValue($object, call_user_func_array(
            $callback, array($prop->getValue($object))));
    }
    return $object;
}

但如果您的所有对象属性都是公共的,则无需使用它。

【讨论】:

  • 我的观点不仅仅是知名度。该对象也可以是可遍历的。但这个解决方案也解决了这个问题。
  • @Artefacto 我可以请你看看stackoverflow.com/questions/3417180/…(与这个问题完全无关)。重视您的专业知识。
  • 这实际上是一个需要一些时间(也许还需要一些研究)的问题。脚本的解释方式取决于是否启用了 zend 多字节选项,甚至取决于语言环境。相同的脚本可能无法在不同的机器上运行,具体取决于类名和函数/方法名的小写规范化是如何完成的。我明天可能会回答这个问题,现在我必须休息:p
  • @Artefacto 非常感谢,不急:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多