Добавление элемента в массив

  • Автор темы PhpGuest
  • Дата начала

PhpGuest

Guest
Добавление элемента в массив

<?
$vec1[]=1;
$vec1[]=2;
unset($vec1[1]);
$vec1[]=3;

foreach ($vec1 as $k=>$v) echo "$k=>$v<br>\n";

/*

result:

0=>1
2=>3

как сделать unset чтобы порядок индексов н нарушался?

*/

?>
 

Фанат

oncle terrible
Команда форума
задавай руками.
Только зачем тебе порядок индексов?
он же ни на что не влияет
foreach ($vec1 as $v) echo $i++."=>$v<br>\n";
 

PhpGuest

Guest
да впринципе так и сделал только на мой взгляд кривовато выглядит.
А функции сброса/установки этого счетчика нету что ли?
 

Demiurg

Guest
>только на мой взгляд кривовато выглядит.
а на мой взгляд вполне нормально. В чем кривоватость ?
 

Фанат

oncle terrible
Команда форума
кривовато - это париться на счет целостности индекса.
а не зависеть от него - это, как раз, прямовато.
 

Фанат

oncle terrible
Команда форума
Frol, мальчик мой.
Это можно сделать.
Но после этого придется задать вопрос - А ЗАЧЕМ?
И вот тут-то ты будешь иметь бледный вид, поскольку абсолютно никакого смысла в этой операции нет. Т.е. она будет лишней. Ненужной.

Точно так же можно напихать в свой код десятки и сотни ненужных команд. Что, кстати, все начиающие и делают.
Если ты начинающий - то не лезь тогда отвечать.
 

гоша

Guest
> как сделать unset чтобы порядок индексов н нарушался?

unset($vec[1]) --> array_splice($vec,1,1)
 

гоша

Guest
Я объясню. Пусть имеем:

PHP:
$vec=array();
$vec[]='a';$vec[]='b';$vec[]='c';$vec[]='d';
unset($vec[2]);
А как нам теперь обратиться (на запись) к последнему элементу массива?

Есть случаи, когда всё-таки лучше

> париться на счет целостности индекса

чем возиться с end()/key() итп.
 

Demiurg

Guest
>Есть случаи, когда всё-таки лучше
чем лучше ?
сравни:
$var = $vec[szeof($vec)-1];
и
$var = end();
 

гоша

Guest
На запись, Demiurg, на запись обратиться...
И чтобы интереснее было, не к последнему, а к предпоследнему.
 

Фанат

oncle terrible
Команда форума
Есть случаи, когда всё-таки лучше
> париться на счет целостности индекса
Гоша, то есть, есть случаи, когда все-таки лучше использовать альтернативу foreach? ;-)
 

гоша

Guest
При чем тут foreach? foreach -- для перебора элементов, а не для произвольного доступа.

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

Demiurg

Guest
гоша
а ты думаешь это так часто бывает нужно ? А сколько ресуров потратиться на переиндексацию массива ? Теперь представь, что для "удобства" такую переиндексацию надо делать при каждом изменении массива.
 

Фанат

oncle terrible
Команда форума
массив, в котором есть необходимость обращаться именно к предпоследнему жлементу говорит о неправильном подходе к организации данных :)
 

гоша

Guest
Вопрос об эффективности, как обычно, зависит от отношения выборки/обновления. Что касается "частоты", то не так уж редко нужен "классический" массив, с операциями типа "перейти к следующему, предыдущему, последнему, энному, данном +/- энному элементу".
 

гоша

Guest
Фанат

Случай из практики. Шаблонный движок (типа jsp на php), есть свои теги, которые могут быть вложены друг в друга. У тегов есть атрибуты, к атрибуту родительского тега можно обратиться как parent.attr, можно и parent.parent. итп.

Естественно, ведется стек тегов, и конструкции parent.parent итп интерпретируются именно как обращение к последнему (пред, пред-пред итд) элементу.

Что тут такого особо неправильного?
 

Demiurg

Guest
молодец, гоша, древовидную структуру хранить в массиве, где положение элемента зависит от индекса массива. Вот тебе и неправильный подход к организации данных.
 

Falc

Новичок
Demiurg
>>древовидную структуру хранить в массиве
А чем тебе не нравится древовидная чтруктура в массиве? Очень удобно.
 

Demiurg

Guest
>А чем тебе не нравится древовидная чтруктура в массиве? Очень удобно.
"...где положение элемента зависит от индекса массива."

Falc
можешь разьяснить вид подобной структуры ?
 
Сверху