<?php session_start();
$var=count($_SESSION['by']);
$i=intval($_REQUEST['tdn']);$_SESSION['sum']-=$_SESSION['by'][$i]['pr'];
unset($_SESSION['by'][$i]);
for ($i; $i<$var; ){
$_SESSION['by'][$i]=$_SESSION['by'][++$i];
};unset($_SESSION['by'][$var]);
Спустя 25 минут, 50 секунд (7.12.2010 - 06:31) kirik написал(а):
Не могу понять код. Вот пример переназначения:
Но проще сделать так:
$array = array(1,2,3,4,5,6);
for($i = 0, $c = count($array); $i < $c; $i++) {
if(isset($array[$i + 1])) {
$array[$i] = $array[$i + 1];
} else {
unset($array[$i]); // удаляем последний элемент, так как его значение уже назначено
}
}
print_r($array);
/*
Array
(
[0] => 2
[1] => 3
[2] => 4
[3] => 5
[4] => 6
)
*/
Но проще сделать так:
$array = array(1,2,3,4,5,6);
unset($array[0]); // ансетим нулевой элемент
$array = array_values($array); // "собираем" новый массив, чтобы индексация была с нуля
print_r($array);
/*
Array
(
[0] => 2
[1] => 3
[2] => 4
[3] => 5
[4] => 6
)
*/
Спустя 13 минут, 22 секунды (7.12.2010 - 06:44) Noal написал(а):
<?php session_start();
$i=intval($_REQUEST['tdn']);
$_SESSION['sum']-=$_SESSION['by'][$i]['pr'];
unset($_SESSION['by'][$i]);
array_values($_SESSION['by']);
и так не фурычит, тот элемент который удаляеться, допустим $_REQUEST['tdn'] =4
становиться пустым, но вехний пятый на него не смещаеться тем не мение удаляется последний, получается что масив стал меньше сразу на 2 ячейки, 1 изкоторых есть но пустая
А удален в итоге последний элемент массива который не при чем
Спустя 4 минуты, 5 секунд (7.12.2010 - 06:48) kirik написал(а):
Noal
Посмотрите внимательнее как используется функция array_values.
Посмотрите внимательнее как используется функция array_values.
Спустя 4 часа, 17 минут, 10 секунд (7.12.2010 - 11:06) Noal написал(а):
м.. то есть если значением есть маccив использование этой функции будет довольно громоздким
в первом топе я в принципи сделал то же самое
Прирост обуславливается инкрементом внутри цикла
но все же где то тут я ошибся
$array = array(1,2,3,4,5,6);
for($i = 0, $c = count($array); $i < $c; $i++) {
if(isset($array[$i + 1])) {
$array[$i] = $array[$i + 1];
} else {
unset($array[$i]); // удаляем последний элемент, так как его значение уже назначено
}
}
print_r($array);
в первом топе я в принципи сделал то же самое
<?php session_start();
$var=count($_SESSION['by']); //считаю элементы массива
$i=intval($_REQUEST['tdn']); //принудительно делаю цифру из пришедших данных
$_SESSION['sum']-=$_SESSION['by'][$i]['pr']; //на это можно не обращать внимания
unset($_SESSION['by'][$i]); //удаляю нужным мне элемент массива
for ($i; $i<$var; ){ //ввожу цикл от $i первый элемент который подлежит замене
//пока он меньше предидущего количества элементов массива
$_SESSION['by'][$i]=$_SESSION['by'][++$i]; //здесь присваивается значение элемента ++$i (увеличеного на 1)
}; // значению элемента $i
unset($_SESSION['by'][$var]); //после того как $i становиться == $var цикл прекращается,
// элемент $var удаляется.
Прирост обуславливается инкрементом внутри цикла
но все же где то тут я ошибся

Спустя 2 часа, 13 минут, 19 секунд (7.12.2010 - 13:19) inpost написал(а):
А почему не foreach для перебора массива?
Спустя 9 минут, 44 секунды (7.12.2010 - 13:29) Noal написал(а):
А какая разница просто писал ночью что в голову пришло то и состряпал
на производительность думаю не повлияет, главное чтобы работало:)
тем более нет смысла перебирать весь масив, если можно только вес последующие элементы подвинуть.
на производительность думаю не повлияет, главное чтобы работало:)
тем более нет смысла перебирать весь масив, если можно только вес последующие элементы подвинуть.
Спустя 36 минут, 5 секунд (7.12.2010 - 14:05) myconstitution написал(а):
Всем доброго времени суток.
Что-то споткнулся на месте, помогите пожалуйста разобраться в сложившийся ситуации с массивами.
В массиве $arr содержаться старые (первоначальные) значения id и имен.
В массиве $tmp содержаться новые (измененные) значения id и имен.
Каким образом заменить значения в массиве $arr на значения из массива $tmp, но для каждого ключа соответсвенно.
Должна получиться следующая картина:
Массив $arr, после замены.
Что-то споткнулся на месте, помогите пожалуйста разобраться в сложившийся ситуации с массивами.
В массиве $arr содержаться старые (первоначальные) значения id и имен.
$arr Array
(
[1] => Array
(
[id] => id001
[name] => name001
)
[2] => Array
(
[id] => id002
[name] => name002
)
[3] => Array
(
[id] => id003
[name] => name003
)
)
В массиве $tmp содержаться новые (измененные) значения id и имен.
$tmp Array
(
[id] => Array
(
[0] => id1
[1] => id2
[2] => id3
)
[name] => Array
(
[0] => name1
[1] => name2
[2] => name3
)
)
Каким образом заменить значения в массиве $arr на значения из массива $tmp, но для каждого ключа соответсвенно.
Должна получиться следующая картина:
Массив $arr, после замены.
$arr Array
(
[1] => Array
(
[id] => id1 //значение id взято из $tmp[id][0]
[name] => name1
)
[2] => Array
(
[id] => id2
[name] => name2
)
[3] => Array
(
[id] => id3 //значение id взято из $tmp[id][2]
[name] => name3
)
)
Спустя 1 час, 41 минута, 11 секунд (7.12.2010 - 15:46) Noal написал(а):
$q=count($arr); $w=count($tmp['id']); $e=count($tmp['name']); // переменные для условия
if ($q==$w && $w==$e) {
foreach($arr as $key => $value){
$arr["$key"]['id'] = $tmp['id']["$key"];
$arr["$key"]['name'] = $tmp['name']["$key"];
//Наверное както так
}
}else {echo 'массивы не могут быть качественно сложены';}
тут просто запутаться можно из за того что в них разные принцы размещения элементов так сказать.
Это конечно частный случай, чем более обобщенной будет функция тем массивнее
Спустя 23 часа, 52 минуты, 52 секунды (8.12.2010 - 15:39) Noal написал(а):
Ура сделал, хоть и кое как
Такой интересный этот foreach, он новые элементы в массив добавляет а старые перезаписывать не хочет...
<?php
print_r($_SESSION['by']);
$l=intval($_REQUEST['tdn']);
echo "<br/>$l".'<br/>';
foreach ($_SESSION['by'] as $key => $value){
if($key != $l){
echo "$key".'<br/>';
$ar[]=$value;
}
else {$_SESSION['sum']-=$_SESSION['by'][$key]['pr'];};
};Unset($_SESSION['by']);$_SESSION['by']=$ar;
print_r($_SESSION['by']);
Такой интересный этот foreach, он новые элементы в массив добавляет а старые перезаписывать не хочет...