Добавьте дочерний элемент node к определенному индексу в объекте с php

62
7

У меня есть объект, и у меня есть новое значение, которое мне нужно добавить к этому объекту, но не только к его концу, это не проблема. Мне нужно добавить это значение в новый node по определенному индексу.


Итак, вот объект.


[object]=>{ 
["a"]=> "value"
["b"]=> "value"
["c"]=> "value"
["d"]=> "value"
}

Тогда у меня есть это пятое значение, которое мне теперь нужно добавить в индекс 1, или как он назван в этом примере "b". Вот так.


[object]=>{ 
["a"]=> "value"
["e"]=> "fifth value"
["b"]=> "value"
["c"]=> "value"
["d"]=> "value"
}

Итак, остается вопрос: есть ли у вас разумный способ сделать это, или мне нужно разбить их и превратить в массивы и объединить их в массивы, а затем назначить им новый объект, явно говорящий ему как объект?


Как это.


$object = (object)array_merge((array)$first, (array)$second);

Я чувствую, что должен быть лучший способ справиться с этим, только с объектами.


Спасибо за ваше время.

спросил(а) 2021-01-19T17:29:46+03:00 2 месяца, 3 недели назад
1
Решение
76

Для чего вам это нужно:


[object]=>{ 
["a"]=> "value"
["e"]=> "fifth value"
["b"]=> "value"
["c"]=> "value"
["d"]=> "value"
}

чтобы быть отличным от этого:


[object]=>{ 
["a"]=> "value"
["b"]=> "value"
["c"]=> "value"
["d"]=> "value"
["e"]=> "fifth value"
}

?


Если вам НУЖНО, чтобы они были разными, вы неправильно используете ООП.


EDIT: что мешает вам использовать массивы?

ответил(а) 2021-01-19T17:29:46+03:00 2 месяца, 3 недели назад
62

Объекты просто не имеют индексов, у них есть свойства, а свойство $obj- > всегда есть свойство $obj- > - без упорядочения, никаких индексов ничего подобного.


Что вам нужно, это (обычно) числовой индексный массив, а не объект, а не ассоциативный массив - если вы настаиваете на необходимости сортированного альфа-массива (альфа-ключи, а не числовые ключи), то вы можете использовать ksort, чтобы справиться с этой конкретной проблемой.

$array = array( 
"a" => "value",
"e" => "fifth value",
"b" => "value",
"c" => "value",
"d" => "value",
);
ksort($array);
print_r($array);

note вы всегда можете включить его в объект, если по какой-то причине вам это нужно, выполнив $obj = (object) $array; после сортировки

ответил(а) 2021-01-19T17:29:46+03:00 2 месяца, 3 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема