Неожиданные результаты при преобразовании объекта пространства имен в массив - PullRequest
0 голосов
/ 04 декабря 2010

У меня неожиданные результаты при преобразовании объекта пространства имен в массив.

<?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 голосов
/ 04 декабря 2010

Вам на самом деле не нужно никаких регулярных выражений. Вы можете сделать следующее:

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). Так что в этом случае даже не имеет смысла проверять наличие этого конкретного замещающего символа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...