Jump to content
  • 0

как удалить элемент массива?


T@NKIST
 Share

Question

У меня есть массив:


$file[0]="0";
$file[1]="1";
$file[2]="";//пустая переменная
$file[3]="";//пустая переменная
$file[4]="4";

мне нужно сделать так чтоб через цикл for пустые переменные удалялись с массива без нарушения структуры (пустые переменные заменялись следующими не пустыми переменными соблюдая очередность

и чтоб в конце у меня получилось вот так


$file[0]="0";
$file[1]="1";
$file[2]="4";

как это сделать?

Напоминаю что я вручную этим управлять не буду, этот код я вставлю в скрипт и все должно быть на автомате.

массив берется через функцию file("file.txt") а пустые переменные это строка которая состоит только из символа переноса в файле file.txt

Link to comment
Share on other sites

22 answers to this question

Recommended Posts

  • 0

Создаёте новый пустой массив, потом методом последовательных итераций проходите по $file, проверяете условия и присваиваете элементу нового массива i-тый элемент массива $file. Если нужно именно имя $file, тогда делаете присвоение после цикла.

  • Like 1
Link to comment
Share on other sites

  • 0

я для очистки массивов такую пользую:


/**
* удаляет пустые элементы массива
* @param unknown_type $array
*/
static function cleanArray($array = array()){
if(count($array))
foreach ($array as $k => $v)
if($v == '')
unset($array[$k]);

return $array;
}

а если вам надо сбросить пустые индексы, то ещё один цикл, где присвоить новому массиву оставшиеся значения. вроде:


$newArr = array();
foreach($cleanArr as $value){
$newArr[] = $value;
}

Edited by Быколай
Link to comment
Share on other sites

  • 0

да уж, не хватает несколько важных функций для работы с массивами :)

и всё таки php язык хороший. много чего есть, в сравнении с прочими. а чего нет, не сложно дописать. а php 6 не за горами, там ещё лучше будет :)

Edited by Быколай
Link to comment
Share on other sites

  • 0

//offtop

самое плохие что нельзя отслеживать где находится указатель массива. Можно их передвигать, можно перейти на начало или конец, а вот получить где он сейчас нельзя :(

Link to comment
Share on other sites

  • 0

//offtop

самое плохие что нельзя отслеживать где находится указатель массива. Можно их передвигать, можно перейти на начало или конец, а вот получить где он сейчас нельзя :(

может не понял в чём проблема, но: есть массив, если циклы для работы с ним, и в любом цикле есть возможность выйти из него вон или продолжить. и чем current() вас не устраивает?

Link to comment
Share on other sites

  • 0

не совсем ты меня понял.. Есть к примеру функция foreach() которая мотает массив от начала до конца. Мне нужно к примеру отсчитывать определённое число. Где сейчас внутренний указатель узнать нельзя. И по этому приходится дополнительно вводить переменную, её увеличивать и в нужный момент обнулять. Простой пример, вывод информации по столбцам, где необходимо в нужный момент вставлять к примеру </tr><tr>

Edited by Gold Dragon
Link to comment
Share on other sites

  • 0

не совсем ты меня понял.. Есть к примеру функция foreach() которая мотает массив от начала до конца. Мне нужно к примеру отсчитывать определённое число. Где сейчас внутренний указатель узнать нельзя. И по этому приходится дополнительно вводить переменную, её увеличивать и в нужный момент обнулять. Простой пример, вывод информации по столбцам, где необходимо в нужный момент вставлять к примеру </tr><tr>

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

Link to comment
Share on other sites

  • 0

А регуляркой это не провернуть шоль?

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

Да везде это есть, в том или ином виде.

Edited by Gaspode
Link to comment
Share on other sites

  • 0

пожалуй функция array_splice подойдет

но как мне определить пустой элемент массива?

if($file[$i]=='') почему то не помогает

if($file[$i]==NULL) тоже

как же это сделать?

а вы что-то писали про то что у вас может оказаться в массиве пустой элемент, состоящий из переносов строк... м.б. это влияет? вот не знаю trim() тут поможет, или нет? если чтоб перенос строки, это: \n

Edited by Быколай
Link to comment
Share on other sites

  • 0

пожалуй функция array_splice подойдет

но как мне определить пустой элемент массива?

if($file[$i]=='') почему то не помогает

if($file[$i]==NULL) тоже

как же это сделать?

а вы что-то писали про то что у вас может оказаться в массиве пустой элемент, состоящий из переносов строк... м.б. это влияет? вот не знаю trim() тут поможет, или нет? если чтоб перенос строки, это: \n

нет, я же говорил что использую функцию file()

и в том тексте есть пустые строки а эта функция каждую строку переносит в массив

вот пример текста

twwk.jar|28.09.2011|rt

VistaICO.txt|30.09.2011|
sizer.dll|30.09.2011|
kemulator.cfg|30.09.2011|

Link to comment
Share on other sites

  • 0

Во-первых, есть array_filter, во-вторых, есть array_diff :), в третьих, можно сделать что-то типа preg_split("/\s*\n\s*/", file_get_contents("file.txt")). Но судя по примерам строк рискну предположить, что для этой задачи вообще может лучше подойти fgetcsv...

Link to comment
Share on other sites

  • 0

Во-первых, есть array_filter, во-вторых, есть array_diff :), в третьих, можно сделать что-то типа preg_split("/\s*\n\s*/", file_get_contents("file.txt")). Но судя по примерам строк рискну предположить, что для этой задачи вообще может лучше подойти fgetcsv...

блин, ничего не получается

Link to comment
Share on other sites

  • 0

array_filter() не совсем подходит. А вот array_diff() самое то(!), совсем про него забыл. Забить во второй массив пустую сточку и на выходи получишь массив без пустоты. Единственное неудобство это то, что сохраняются ключи массива, а значит полученный массив будет больше похож на ассоциативный

$a = array('q0','q1','','q3','q3');
$b = array('');
$c = array_diff($a, $;
var_dump($c);

если в значениях может попасться что-то типа перевода каретки или конец строки, то предварительно можно массив почистить или добавить во второй массив (хотя я не пробовал)

А регуляркой это не провернуть шоль?
А что ты хочешь проверить и как? Edited by Gold Dragon
Link to comment
Share on other sites

  • 0

array_filter() не совсем подходит. А вот array_diff() самое то(!), совсем про него забыл. Забить во второй массив пустую сточку и на выходи получишь массив без пустоты. Единственное неудобство это то, что сохраняются ключи массива, а значит полученный массив будет больше похож на ассоциативный

$a = array('q0','q1','','q3','q3');
$b = array('');
$c = array_diff($a, $;
var_dump($c);

если в значениях может попасться что-то типа перевода каретки или конец строки, то предварительно можно массив почистить или добавить во второй массив (хотя я не пробовал)

А регуляркой это не провернуть шоль?
А что ты хочешь проверить и как?

непомогает :facepalmxd:

Link to comment
Share on other sites

  • 0

T@NKIST, покажи свой код. Почему мой пример не помогает? Я вставил твой кусок и отлично всё работает. Вывел это

array(3) { [0]=> string(1) "0" [1]=> string(1) "1" [4]=> string(1) "4" }

просто мне нужен ассоциативный массив

а мой код в предыдущем посте

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy