Массивы -> array_splice -> дублируются :(

Aleksey

Новичок
Массивы -> array_splice -> дублируются :(

Приветсвую!
Первый день на PHP, так что сильно не грузите :)

Такая трабла, делаю класс, в нем:

PHP:
var $id;
var $name;
В инициализации эти переменные превращаются в пустой массив:

PHP:
$this->$id = array();
$this->$name = array();
далее, при работе с классом, я вызываю функцию этого класса, в которой следующий код:

PHP:
array_splice($this->$id, count($this->$id), 0, $newId);
array_splice($this->$name, count($this->$name), 0, $newCategoryName);
где $newId и $newCategoryName - значения, которые нужно добавить к массивам.

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

count($this->$id) = 2
count($this->$name) = 2

а должно быть:

count($this->$id) = 1
count($this->$name) = 1

почему так?

Перед array_splice также выполняется еще один код, возможно это имеет какое-то значение:
PHP:
$newId = 0;
if (count($this->$id) > 0) {
  $newId = max($this->$id);
}
$newId += 1;
PHP 4.5 @ Windows XP

ЗЫ: звиняйте, если не понятно объяснил..
 

Фанат

oncle terrible
Команда форума
как я понимаю, опыт программирования присутствует?
а на каком языке?
 

Фанат

oncle terrible
Команда форума
тогда не очень понятна фраза
Перед array_splice также выполняется еще один код, возможно это имеет какое-то значение
почему нельзя это проверить самостоятельно - имеет или не имеет?

почему нельзя написат тестовый пример, без классов, методов и "ещё одних кодов"? Почему бы не уменьшить количество неизвестных в задаче, сведя их к минимуму?

но перейдём к вопросу.
честно говоря, я не очень понял
$newId и $newCategoryName - значения, которые нужно добавить к массивам.
если нужно добавить, то
1) почему дя этого используется такая оригинальная функция, как array_splice
2) почему вызывает удивление тот факт, что размер массива увеличился?
 

Aleksey

Новичок
почему нельзя это проверить самостоятельно - имеет или не имеет?
проверял:
PHP:
$id = array();
$name = array();
$newId = 0;
		
if (count($id) > 0) {
  $newId = max($id);
}
$newId += 1;

array_splice($id, count($id), 0, $newId);
array_splice($name, count($name), 0, "какой-то текст");
		
echo count($name);
работает как надо, count($name) = 1.

1) почему дя этого используется такая оригинальная функция, как array_splice
дык я ж говорю, первый день на PHP, я еще не все функции знаю, это самая подходящая на мой взгляд. Есть другие, покажи, буду юзать ;)

2) почему вызывает удивление тот факт, что размер массива увеличился?
удевляет тот факт, что размер каждого массива в объекте увеличавается при каждом вызове array_splice, т.е. тот же код, расположенный в классе возвратит не count($name) = 1, а count($name) = 2:
PHP:
array_splice($id, count($id), 0, $newId);
array_splice($name, count($name), 0, "какой-то текст");
как видно, я вставляю в массив $id новое значение $newId, а на следующей строчке в массив $name - тоже новое значение. В классе, после выполнения первой строчки:
PHP:
array_splice($id, count($id), 0, $newId);
массив $name каким-то образом тоже увеличивается?!
Конечно, я писал и так:
PHP:
array_splice($id, count($id), 0, $newId);
$this->$name[count($this->$name)] = "какой-то текст";
и это работает, но насколько это правильно, не возникнет ли в будущем с этим проблем? Да и вобще, почему все массивы увеличиваются?

-~{}~ 03.03.07 20:50:

-~{}~ 03.03.07 20:51:

вопрос снят, сам нашел решение http://ru.php.net/manual/ru/function.array-push.php

спасибо за участие ;)
 
Сверху