PHP json_decode вопрос

Для меня эти 3 вида удовлетворяют большинство моих потребностей:

shared_ptr - считаемый на ссылку, освобождение, когда счетчик достигает нуля

weak_ptr - то же как выше, но это - 'ведомое устройство' для shared_ptr, не может освободить

auto_ptr - когда создание и освобождение происходят в той же функции, или когда объект нужно считать one-owner-only когда-либо. Когда Вы присваиваете один указатель на другого, вторые 'кражи' объект сначала.

у меня есть своя собственная реализация для них, но они также доступны в Boost.

я все еще передаю объекты ссылкой (const каждый раз, когда возможный), в этом случае вызываемый метод должен предположить, что объект жив только во время вызова.

существует другой вид указателя, что я использую это, я звоню hub_ptr. Именно, когда у Вас есть объект, должно быть доступным от объектов, вложенных в нем (обычно как виртуальный базовый класс). Это могло быть решено путем передачи weak_ptr им, но это не имеет shared_ptr к себе. Поскольку это знает, что эти объекты не жили бы дольше, чем он, это передает hub_ptr им (это - просто шаблонная обертка к регулярному указателю).

6
задан dtrainer45 11 November 2009 в 08:11
поделиться

2 ответа

I think one approach would be to take advantage of the second parameter to json_decode, assoc:

"When TRUE, returned objects will be преобразованы в ассоциативные массивы ».

Я считаю, что обычно легче работать с ассоциативными массивами, чем с классом stdClass .

$str = '{
   "core": {
        "segment": [
            {
                "id": 7,
                "name": "test1" 
            },
            {
                "id": 4,
                "name": "test2" 
            } 
        ] 
    }
}';
print "<pre>";
print_r(json_decode($str));
print "</pre>";
print "<pre>";
print_r(json_decode($str,true));
print "</pre>";

Это создает сначала версию объекта, а затем ассоциативный массив:

stdClass Object
(
    [core] => stdClass Object
        (
            [segment] => Array
                (
                    [0] => stdClass Object
                        (
                            [id] => 7
                            [name] => test1
                        )

                    [1] => stdClass Object
                        (
                            [id] => 4
                            [name] => test2
                        )

                )

        )

)
Array
(
    [core] => Array
        (
            [segment] => Array
                (
                    [0] => Array
                        (
                            [id] => 7
                            [name] => test1
                        )

                    [1] => Array
                        (
                            [id] => 4
                            [name] => test2
                        )

                )

        )

)

Думаю, я бы сделал что-то вроде: создать новый пустой массив, декодировать как ассоциативный массив, извлечь элементы сегмента и объединить их в новый пустой массив. Итак:

$segments = array();
// assuming you had a bunch of items in the $strings array
foreach ($strings as $str) {
  $item = json_decode($str,true);
  $segments = array_merge($item['core']['segment], $segments);
}

Теперь вы можете закодировать это в json следующим образом:

$final_json = json_encode(array('segments'=>$segments));
14
ответ дан 8 December 2019 в 14:43
поделиться

Внешний объект содержит два элемента с именем «сегмент». Хотя это допустимый JSON, невозможно иметь объект PHP с двумя разными элементами с одинаковым именем.

2
ответ дан 8 December 2019 в 14:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: