Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.95/43: Рейтинг темы: голосов - 43, средняя оценка - 4.95
1 / 1 / 1
Регистрация: 19.10.2012
Сообщений: 55

Удалить пустые элементы из массива и перегнать все в один

04.01.2013, 03:11. Показов 8008. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
есть такой код :
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
$html = str_get_html($content);         
                
                $div = $html->find('table tbody',0);
                    $i = 0;
                    while($article = $div->children($i++)){
                        
                        $item['marka'] = $article->find('td.title',0)->plaintext;
                        $item['cena']  = $article->find('td[width=423]',0)->plaintext;
                        $item['data']  = $article->find('td[width=45]',0)->plaintext;
                        $item['autor']  = $article->find('td[width=186]',0)->plaintext;
                        
                        
                             $articles[] = $item;
                    }
на выходе поучаю такой массив :
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
print_r($articles);
 
Array
(
    [marka] => audi
    [cena] => 
    [data] => 12.06.2006
    [autor] => 
)
Array
(
    [marka] => 
    [cena] => 
    [data] => 
    [autor] => Max
)
Array
(
    [marka] => bmw
    [cena] => 32.000
    [data] => 
    [autor] => 
)
Array
(
    [marka] => 
    [cena] => 
    [data] => 
    [autor] =>Sanya
)
Array
(
    [marka] => lexus
    [cena] => 
    [data] => 3.04.2004
    [autor] =>Andrey
)
Array
(
    [marka] => 
    [cena] => 
    [data] => 
    [autor] =>
)
Array
(
    [marka] => honda
    [cena] => 
    [data] => 
    [autor] => Vasya
)
Array
(
    [marka] => 
    [cena] => 
    [data] => 
    [autor] =>
)
Array
(
    [marka] => audi
    [cena] => 20.000
    [data] => 
    [autor] =>
)
Array
(
    [marka] => 
    [cena] => 
    [data] => 
    [autor] => 
)
как мне удалить пустые элементы массива и сделать все в одном массиве ?
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Array
(
    [marka] => audi
    [data] => 12.06.2006
    [autor] => Max
    [marka] => bmw
    [cena] => 32.000
    [autor] =>Sanya
    [marka] => lexus
    [data] => 3.04.2004
    [autor] =>Andrey
    [marka] => honda
    [autor] => Vasya
    [marka] => audi
    [cena] => 20.000
   
)
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
04.01.2013, 03:11
Ответы с готовыми решениями:

Удалить все пустые элементы из списка списков
Дан список списков (List<List<string>>) , из него надо удалить все пустые списки. В простом строковом списке вроде можно сделать так: ...

Получить из него два массива: в один записать все положительные элементы, в другой – отрицательные элементы исходного массива
Дан массив. Получить из него два массива: в один записать все положительные элементы, в другой – отрицательные элементы исходного массива.

Удалить из массива целых чисел все нули. Сформировать два новых массива. В первый переписать все элементы данного массива с четными номерами, во второ
Удалить из массива целых чисел все нули. Сформировать два новых массива. В первый переписать все элементы данного массива с четными...

15
 Аватар для palva
4276 / 2969 / 692
Регистрация: 08.06.2007
Сообщений: 9,922
Записей в блоге: 4
04.01.2013, 03:38
А разве такое возможно? В массиве не может быть несколько элементов с одинаковыми индексами.
0
1 / 1 / 1
Регистрация: 19.10.2012
Сообщений: 55
04.01.2013, 04:23  [ТС]
ясно на тупил (
Как убрать пустые элементы ?
0
 Аватар для alpex
603 / 578 / 103
Регистрация: 16.07.2012
Сообщений: 1,762
04.01.2013, 10:34
php >= 5.3
PHP
1
$articles = array_filter($articles, function($var){return !empty($var);});
php< 5.3
PHP
1
$articles = array_filter($articles, create_function('$var', 'return !empty($var);'));
0
 Аватар для Vovan-VE
13210 / 6599 / 1041
Регистрация: 10.01.2008
Сообщений: 15,069
04.01.2013, 12:23
alpex, Если callback не указывать, то получится то же самое, что Вы написали.
PHP
1
$articles = array_filter($articles);
1
 Аватар для alpex
603 / 578 / 103
Регистрация: 16.07.2012
Сообщений: 1,762
04.01.2013, 12:41
да действительно, не доучил
0
1 / 1 / 1
Регистрация: 19.10.2012
Сообщений: 55
04.01.2013, 12:49  [ТС]
НЕ знаю почему но ни 1 ни 2 ой варианты не работают .
Сработал так
PHP
1
2
3
4
5
6
7
8
function col($el){ return !empty($el);}
                
                foreach($articles as $key=>$val){
                    
                    $result = array_filter($sc_val,col);
                    $new_array[]=$result;
                    
                }
и то массив на выходе не очень (
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
 
Array
(
    [marka] => audi
    [data] => 12.06.2006
)
Array
Array
(
    [autor] => Max
)
Array
(
    [marka] => bmw
    [cena] => 32.000 
)
Array
(
    [autor] =>Sanya
)
Array
(
    [marka] => lexus
    [data] => 3.04.2004
    [autor] =>Andrey
)
Array
Array
(
    [marka] => honda
Array
    [autor] => Vasya
)
Array
Array
(
    [marka] => audi
    [cena] => 20.000
)
Array
Array
0
 Аватар для alpex
603 / 578 / 103
Регистрация: 16.07.2012
Сообщений: 1,762
04.01.2013, 12:55
а если так
PHP
1
array_walk_recursive(&$array, 'array_filter');
0
1 / 1 / 1
Регистрация: 19.10.2012
Сообщений: 55
04.01.2013, 13:13  [ТС]
возвращает цифру 1 (
0
 Аватар для alpex
603 / 578 / 103
Регистрация: 16.07.2012
Сообщений: 1,762
04.01.2013, 13:21
это не один это true
массив изменяется после нее?
0
 Аватар для palva
4276 / 2969 / 692
Регистрация: 08.06.2007
Сообщений: 9,922
Записей в блоге: 4
04.01.2013, 13:24
Вам же не нужно сохранять исходный массив. Поэтому экономнее будет удалять элементы прямо из него.
А если кардинальнее, то при заполнении массива не надо вставлять туда пустые элементы, то есть писать как-нибудь так:
PHP
1
2
if ($t=$article->find('td.title',0)->plaintext) $item['marka'] = $t;
...
Проверку, правда стоит проделать аккуратнее, поскольку в данном случае вы отбросите также значения 0, 0.0 и прочее. Если вы такое не планировали, то напишите в условии точнее, что вы хотите отбросить.
0
1 / 1 / 1
Регистрация: 19.10.2012
Сообщений: 55
04.01.2013, 16:19  [ТС]
Убирает лишнее, но значения массива повторяются
Что не было в исходном коде ...
0
 Аватар для palva
4276 / 2969 / 692
Регистрация: 08.06.2007
Сообщений: 9,922
Записей в блоге: 4
04.01.2013, 16:22
Если это вы мне ответили, то приведите код вашего заполнения массива.
0
1 / 1 / 1
Регистрация: 19.10.2012
Сообщений: 55
04.01.2013, 16:55  [ТС]
Цитата Сообщение от palva Посмотреть сообщение
Если это вы мне ответили, то приведите код вашего заполнения массива.
В первом посте я написал какой массив я получаю но там есть пустые строки.
А ваш пример пустые строки убирает но элементы повторяются ...
Грубо говоря из такова массива :
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
Array
(
    [marka] => audi
    [cena] => 
    [data] => 12.06.2006
    [autor] => 
)
Array
(
    [marka] => 
    [cena] => 
    [data] => 
    [autor] => Max
)
Array
(
    [marka] => bmw
    [cena] => 32.000
    [data] => 
    [autor] => 
)
Array
(
    [marka] => 
    [cena] => 
    [data] => 
    [autor] =>Sanya
)
Array
(
    [marka] => lexus
    [cena] => 
    [data] => 3.04.2004
    [autor] =>Andrey
)
Array
(
    [marka] => 
    [cena] => 
    [data] => 
    [autor] =>
)
Array
(
    [marka] => honda
    [cena] => 
    [data] => 
    [autor] => Vasya
)
Array
(
    [marka] => 
    [cena] => 
    [data] => 
    [autor] =>
)
Array
(
    [marka] => audi
    [cena] => 20.000
    [data] => 
    [autor] =>
)
Array
(
    [marka] => 
    [cena] => 
    [data] => 
    [autor] => 
)
надо получить такой :
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
Array
(
    [marka] => audi
    [data] => 12.06.2006
    [autor] => Max
Array
(
    [marka] => bmw
    [cena] => 32.000
    [autor] =>Sanya
)
Array
(
    [marka] => lexus
    [data] => 3.04.2004
    [autor] =>Andrey
)
Array
(
    [marka] => honda
    [autor] => Vasya
)
Array
(
    [cena] => 20.000
)
0
 Аватар для palva
4276 / 2969 / 692
Регистрация: 08.06.2007
Сообщений: 9,922
Записей в блоге: 4
04.01.2013, 17:10
Похоже, что я не понял задачу. Сначала надо было просто убрать пустые значения. Но в том примере который вы привели, сделано непонятно что. Такое впечатление, что объединены первый массив со вторым, третий с четвертым и т. д. Но в конце марка Audi тоже куда-то исчезла, так что алгоритм более сложный и непонятный.
0
1 / 1 / 1
Регистрация: 19.10.2012
Сообщений: 55
04.01.2013, 20:38  [ТС]
Цитата Сообщение от palva Посмотреть сообщение
Похоже, что я не понял задачу. Сначала надо было просто убрать пустые значения. Но в том примере который вы привели, сделано непонятно что. Такое впечатление, что объединены первый массив со вторым, третий с четвертым и т. д. Но в конце марка Audi тоже куда-то исчезла, так что алгоритм более сложный и непонятный.
На счет марки Audi это опечатка .
Вы все правильно поняли убрать пустые значения и объединить массивы .

Добавлено через 3 часа 13 минут
вот способ первый
PHP
1
$articles = array_filter(array_map('array_filter', $articles));
и вот способ второй
PHP
1
2
3
4
5
foreach($articles as &$article)
                        $article = array_filter($article);
                            unset($article);
                            $articles = array_filter($articles);
                                print_r($articles);
Всем спасибо кто отписал в этой теме !
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
04.01.2013, 20:38
Помогаю со студенческими работами здесь

Массив: Удалить все повторяющиеся элементы, оставив в массиве только один.
Помогите, народ! Срочно нужна программа. Собственно задание: В целочисленном массиве k(n), заданном случайным образом, много...

Переписать из исходного массива все элементы, большие пяти в один массив, а все остальные – в другой
Переписать из исходного массива все элементы, большие пяти в один массив, а все остальные – в другой. Найти сумму положительных элементов...

Заданы два массива A и B. Удалить из массива А все элементы, входящие в состав массива В
Половину я сделала, задала массивы, а дальше не получается :sorry: %-) Поможете? program Project10; {$APPTYPE CONSOLE} ...

Если элементы массива упорядочены по возрастанию, удалить их через один
Дан массив размерности n (четное). В случае если элементы массива упорядочены по возрастанию, удалить элементы массива через один, начиная...

Удалить из массива, в котором все элементы различны, максимальный и минимальный элементы
9. Удалить из массива, в котором все элементы различны, максимальный и минимальный элементы.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru