Добавить дочерний узел к определенному индексу в объекте с php - PullRequest
0 голосов
/ 08 июля 2010

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

Хорошо, вот и объект.

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

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

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

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

Вот так.

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

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

Спасибо, что уделили время.

Ответы [ 2 ]

2 голосов
/ 08 июля 2010

Что вы делаете, для этого нужно:

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

отличаться от этого:

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

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

РЕДАКТИРОВАТЬ: Что мешает вам использовать массивы?

1 голос
/ 08 июля 2010

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

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

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

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

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