Удалить несколько элементов из массива

DenVeroid

Новичок
Удалить несколько элементов из массива

имеется массив примерно такого рода

PHP:
$name_select_data=array(
                    '1'       =>  'name 1',
                    '2'       =>  'name 2',
                    '3'       =>  'name 3',
                    '4'       =>  'name 4',
                    '5'       =>  'name 5',
                    '6'       =>  'name 6',
);
каким образом удалить третий и четвёртый элемент?
тоесть должно получиться так

PHP:
$name_select_data=array(
                    '1'       =>  'name 1',
                    '2'       =>  'name 2',
                    '5'       =>  'name 5',
                    '6'       =>  'name 6',
);
догадываюсь что можно удалить таким образом

PHP:
unset($name_select_data[3]);
но таким образом мы удалим один, а как сразу несколько?
 

white phoenix

Новичок
DenVeroid
смешной вопрос.. ну сделай
PHP:
unset($name_select_data[3]);
unset($name_select_data[4]);
unset($name_select_data[N]);
...
или
PHP:
unset($name_select_data[3],$name_select_data[4],$name_select_data[N]);
Из серии "я знаю как одеть носок, но как одеть два носка я не знаю, хоть убейте".
 

zerok

Новичок
Автор оригинала: white phoenix
DenVeroid
смешной вопрос.. ну сделай
PHP:
unset($name_select_data[3]);
unset($name_select_data[4]);
unset($name_select_data[N]);
...
или
PHP:
unset($name_select_data[3],$name_select_data[4],$name_select_data[N]);
Из серии "я знаю как одеть носок, но как одеть два носка я не знаю, хоть убейте".
какие вы все умные ...
вот у меня команда unset($value[$keyvalue]) убивает всю переменную!
 

zerok

Новичок
Фанат

я решила эту проблему перебором скопированног массива с удалением ненужных элементов в момент перебора.
 

Фанат

oncle terrible
Команда форума
молодец.
всегда приятно, когда человек решает несуществующую проблему =)
 

zerok

Новичок
Фанат

несуществующию?
сходи удали таким образом элемент сессионной переменной а я посмотрю.
 

SelenIT

IT-лунатик :)
zerok
Не стоит так дразнить Фаната, особенно по поводу сессий. Как-никак он является автором целого материала http://phpfaq.ru/sessions#main, где, кроме прочего, раскрыта и эта тема ;)
 

Фанат

oncle terrible
Команда форума
я не ошибся?
ты считаешь себя гуру в пхп, который прекрасно понимает, что делает, а меня - лохом, который в первый раз пхп увидел.
И отправляешь меня выполнить некий пример, и убедиться?
 

WP

^_^
zerok
Мадмуазель, не могли бы Вы привести код которым Вы решили Вашу несуществующИю проблему? Мы в непонятках. Но однозначно - проблема в местоположении того места, откуда растут пальцы.
А указывать тут не надо, Вам никто ничего не должен.
Фанат
Смилуйся, а?)
 

Фанат

oncle terrible
Команда форума
SelenIT
та проблема, о которой ты подумал, не решается описанным путём перебора массива

-~{}~ 09.07.06 03:14:

WP
отсюда мы имеем кашу в голове и отсутствие у человека всякого представления о том, о чём он взялся рассуждать.
зато есть дешёвые понты - "какие вы все умные", "сходи удали".
 

zerok

Новичок
<?
session_start();
session_register("order");

if ($_GET[ordadd]) {
$order[]=$_GET[ordadd];
}
if ($_GET[ordfil]) {
$temp = $order;
$order ='';
while(list($named,$valued) = each($temp)) {
if ($valued != $_GET[ordfil]) $order[$named] = $valued;
}
}
?>

соответственно
при получении значения ordadd - мы его добавляем в сессионную переменную $order при получении значения
ordfil - удаляем его из сессионной переменной $order

написание unset($order[$named]) в месте перебора переменной unsetит всю сессионную переменную $order;

Я не претендую на звание гуру, но увы и ах. это работает только моим методом.

-~{}~ 09.07.06 14:08:

то есть изначально оно было написано так:

<?
session_start();
session_register("order");

if ($_GET[ordadd]) {
$order[]=$_GET[ordadd];
}
if ($_GET[ordfil]) {

while(list($named,$valued) = each($order)) {
if ($valued != $_GET[ordfil]) unset($order[$named]);
}
}
?>
и не работало адекватно - удаляло переменную полностью.
 

Фанат

oncle terrible
Команда форума
непонятно, зачем было влезать в чужую тему, которая к сессиям не имеет никакого отношения.
непонятно, почему приходится вытрясать из человекв описание проблемы чуть ли не силком.
непонятно, почему в приведённых примерах отсутствует проверочный код, который показывает, как человек проверял свои догадки.

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

WP

^_^
Шедевральный код. Во-первых меня радует session_register() сам по себе, но это ладно. Во-вторых привиденный код не будет удалять из $order ничего. Мои опасения по поводу пальцев подтвердились. Не думаю что тот кусок бреда с $temp нужно обсуждать. А вот это, стоит, хотя тоже бред:
PHP:
while(list($named,$valued) = each($order)) {
if ($valued != $_GET[ordfil]) unset($order[$named]);
}
}
Давайте переведем на русский язык:
Есть массив $order, выполняем блок кода для каждого его элемента, записывая в $named и $valued пары индексов и значений. Внутри цикла: если значение НЕ равно $_GET[ordfil], то удаляем этот элемент массива. Мне это кажется бредом, не unset виноват, и проблемы никакой нет, Вы её просто выдумали.
Решение.
Я не знаю зачем Вам понадобилось сравнивать значение элемента с $_GET[ordfil], возможно нужно удалить по ключу.
PHP:
$ordfil = isset($_GET['ordfil'])?strval($_GET['ordfil']):'';
unset($order[$ordfil]);
Либо, если действительно нужно значение, то
PHP:
$ordfil = isset($_GET['ordfil'])?strval($_GET['ordfil']):'';
if (($k = array_search($ordfil,$order)) !== FALSE) {unset($order[$k]);}
Фанат
А мне вроде бы понятно... начало месяца)
 

ThomLee

Новичок
zerok
не парь мозги,
PHP:
<pre>
<?php
$order[]=array('ordadd'=>'test');
$test=$order[]=array('ordfil'=>'delete');
var_dump($order);
while (list($named,$valued)=each($order)) {
	if($valued==$test){
		unset($order[$named]);
	}
	
}
echo "---------result-------\r\n";
var_dump($order);
?>
</pre>
Вывод:
PHP:
<pre>
array(2) {
  [0]=>
  array(1) {
    ["ordadd"]=>
    string(4) "test"
  }
  [1]=>
  array(1) {
    ["ordfil"]=>
    string(6) "delete"
  }
}
---------result-------
array(1) {
  [0]=>
  array(1) {
    ["ordadd"]=>
    string(4) "test"
  }
}
</pre>
Тоже самое и сессиями.

var_dump() всех своих переменных (из твоего примера) в студию, может самостоятельно баг увидишь.

-~{}~ 09.07.06 16:11:

WP
я про это промолчал :), подозреваю, что там планируется еще и динамика :)
 

zerok

Новичок
сори - тут конечно опечатка
if ($valued != $_GET[ordfil]) unset($order[$named]);

надо читать как
if ($valued == $_GET[ordfil]) unset($order[$named]);

я код ручками наколачивала в конфу а не копировала все бывает.

после unset($order[$named]) - сессионная переменная целиком пропадает из скрипта.

нет, я охотно верю? что это могут быть особенности работы php с странным вызовом в начале скрипта в виде -

#!/usr/bin/php
потому как оно без него не ассоциировано с php
 

WP

^_^
zerok
> сори - тут конечно опечатка
> надо читать как
Читаем как умеем.
> я код ручками наколачивала в конфу а не копировала все бывает.
Да, это ж цветочки в контексте общего бреда.
> после unset($order[$named]) - сессионная переменная целиком пропадает из скрипта.
Неа, после цикла.
> нет, я охотно верю? что это могут быть особенности работы php с странным вызовом в начале скрипта в виде -
Бред. Ни малейшей связи. Никаких особенностей. У тебя кривые руки. Точка.
А тебе привел два примера кода, все нормально работает.
Тебе действительно нужно сравнивать ЗНАЧЕНИЯ элементов с $_GET[ordfil]? Если да, то ты уверена что совпадение будет одно? Сделай if ($valued == $_GET[ordfil]) {unset($order[$named]); break;}
> сессионная переменная целиком пропадает из скрипта.
Брехня опять же, она может стать пустым массивом, в случае если условие выполнится для каждого из элементов.

-~{}~ 10.07.06 02:14:

поразительно... сколько народа делают выводы не на основе фактов с помощью логики, а на основе собственных догадок и домыслов, таким надо не программировать, а составлять декларации о доходах :D
 
Сверху