将命名空间对象转换为数组时出现意外结果

时间:2010-12-04 01:21:58

标签: php oop namespaces

将命名空间对象转换为数组时,我遇到了意想不到的结果。

<?php

namespace package\test;

class Test {
    private $foo;
    private $bar;

}

$test = new Test();
$testArray = (array) $test;

var_dump($testArray);

,输出

array
    '�package\test\Test�foo' => null
    '�package\test\Test�bar' => null

不确定中的var_dump字符是什么?我查看了源代码,它似乎是&#0;。基本上我需要做的是修剪键,使其最终成为

array
    'foo' => null
    'bar' => null

但是我不确定如何使用正则表达式来定位那些个字符以摆脱我不想要的部分?这适用于PHP 5.3.3。感谢。

1 个答案:

答案 0 :(得分:0)

您实际上不需要任何正则表达式。您可以执行以下操作:

foreach ($testArray as $key => $value) {
    $pos = strrpos($key, chr(0)); // find the last null character
    if ($pos !== false) {
        $testArray[substr($key, $pos+1)] = $value;
        unset($testArray[$key]);
    }
}

浏览器会将每个无法显示的字符替换为黑色菱形(U + FFFD REPLACEMENT CHARACTER)。因此,在这种情况下,检查这个特定的替代字符甚至没有意义。