Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Удаление элементов из массива
Форумы портала PHP.SU » » Хранение данных, их вывод и обработка » Удаление элементов из массива

Страниц (1): [1]
 

1. Gray314 - 27 Апреля, 2011 - 14:06:23 - перейти к сообщению
Ребят помогите динамически удали элементы с массива:
вот например исходный массив:
PHP:
скопировать код в буфер обмена
  1. (
  2.     [0] => второе 34
  3.     [1] => первое а43в, а5, ва3, ы22
  4.     [2] => первое р1, бвв, ые5
  5.     [3] => второе 37
  6.     [4] => первое щщщ, б4б, юа5
  7.     [5] => второе 74
  8.     [6] => 24, 234, 234, 66, 7 Конец слагаемого
  9.     [7] => 6: р1 = аав4- sin(в4а)-ы3ц+у3у-й5ц-ыв
  10.     [8] => ж3 = р5+п3
  11.     [9] => 765: ф = уыу5*cos(пв6)/234
  12.     [10] => х1 = -ла2- sin(а009)
  13.     [11] => 7: ф = уыу5*cos(пв6)/234
  14. )

есть массив с позициями элементов для удаления:
PHP:
скопировать код в буфер обмена
  1. (
  2.     [0] => 1
  3.     [1] => 2
  4.     [2] => 4
  5. )


вот код который я использую для удаления:
PHP:
скопировать код в буфер обмена
  1. for ($k=0;$k<count($array_pos);$k++)
  2.     {
  3.         $pos = $array_pos[$k];      
  4.         array_splice($array_input,$pos,1);
  5.     }

получается при каждой итерации исходный массив уменьшается на 1 элемент, и последующая итерация удаляет не тот элемент, можно это как нибудь реализовать, чтобы все верно отрабатывало?
2. Viper - 27 Апреля, 2011 - 14:29:43 - перейти к сообщению
$arr1 это в чем искать
$arr что ищем

PHP:
скопировать код в буфер обмена
  1. foreach ($arr1 as $key=>$value) {
  2.         foreach ($arr2 as $val) {
  3.                 if ($val == $key) unset($arr1[$key]);
  4.         }
  5. }


Вроде так.

Чет седня мозги совсем не варят...
3. garvey - 27 Апреля, 2011 - 14:37:15 - перейти к сообщению
Viper, можно проще.
PHP:
скопировать код в буфер обмена
  1. foreach (array_values($itemsForDelete) as $deleteIndex) {
  2.     unset ($fullArray[$deleteIndex]);
  3. }
4. Gray314 - 27 Апреля, 2011 - 14:43:32 - перейти к сообщению
Спасибо, я пробывал Unset(), но он при удалении выдаст следующее:
Array
PHP:
скопировать код в буфер обмена
  1. (
  2.     [1] => второе 34
  3.     [4] => второе 37
  4.     [6] => второе 74
  5.     [7] => 24, 234, 234, 66, 7 Конец слагаемого
  6.     [8] => 6: р1 = аав4- sin(в4а)-ы3ц+у3у-й5ц-ыв
  7.     [9] => ж3 = р5+п3
  8.     [10] => 765: ф = уыу5*cos(пв6)/234
  9.     [11] => х1 = -ла2- sin(а009)
  10.     [12] => 7: ф = уыу5*cos(пв6)/234
  11. )

а хотелось бы:
PHP:
скопировать код в буфер обмена
  1. (
  2.     [0] => второе 34
  3.     [1] => второе 37
  4.     [2] => второе 74
  5.     [3] => 24, 234, 234, 66, 7 Конец слагаемого
  6.     [4] => 6: р1 = аав4- sin(в4а)-ы3ц+у3у-й5ц-ыв
  7.     [5] => ж3 = р5+п3
  8.     [6] => 765: ф = уыу5*cos(пв6)/234
  9.     [7] => х1 = -ла2- sin(а009)
  10.     [8] => 7: ф = уыу5*cos(пв6)/234
  11. )

может есть какая функция в php, которая "упорядочит" индексы?)
5. Саныч - 27 Апреля, 2011 - 15:25:49 - перейти к сообщению
Gray314 пишет:
может есть какая функция в php, которая "упорядочит" индексы?)

помойму такой функции нет, но ведь можно самому написать)
PHP:
скопировать код в буфер обмена
  1. function resort($arr)
  2. {
  3.    $new = array();
  4.    foreach($arr as $v) $new[] = $v;
  5.    return $new;
  6. }
  7. $array = resort($array);
6. garvey - 27 Апреля, 2011 - 15:52:31 - перейти к сообщению
Саныч, есть такая функция:
7. Gray314 - 27 Апреля, 2011 - 15:57:18 - перейти к сообщению
Саныч пишет:
Gray314 пишет:
может есть какая функция в php, которая "упорядочит" индексы?)

помойму такой функции нет, но ведь можно самому написать)
PHP:
скопировать код в буфер обмена
  1. function resort($arr)
  2. {
  3.    $new = array();
  4.    foreach($arr as $v) $new[] = $v;
  5.    return $new;
  6. }
  7. $array = resort($array);


Спасибо!
8. garvey - 27 Апреля, 2011 - 16:16:03 - перейти к сообщению
Gray314, а мое решение, которое намного меньше, вас не устраивает? Зачем изобретать велосипед?
9. Саныч - 27 Апреля, 2011 - 17:35:10 - перейти к сообщению
garvey пишет:
Саныч, есть такая функция
не знал... Запомню...
10. Gray314 - 27 Апреля, 2011 - 18:40:23 - перейти к сообщению
garvey пишет:
Gray314, а мое решение, которое намного меньше, вас не устраивает? Зачем изобретать велосипед?

Устраивает спасибо, чесн говоря не заметил сразу твой ответ, подправил свой код, Спасибо)
теперь мучиюсь с регуляркой)

 

Powered by ExBB FM 1.0 RC1