【问题标题】:Unexpected results when converting a namespaced object to an array将命名空间对象转换为数组时出现意外结果
【发布时间】:2010-12-04 01:21:58
【问题描述】:

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

<?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 字符是什么?我查看了源代码,它似乎是&amp;#0;。基本上我需要做的是修剪键,所以它最终是

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

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

【问题讨论】:

    标签: php oop namespaces


    【解决方案1】:

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

    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)。所以在这种情况下,检查这个特定的替代字符甚至没有意义。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-04
      • 1970-01-01
      • 2018-01-10
      • 2014-01-21
      • 2014-09-27
      • 1970-01-01
      相关资源
      最近更新 更多