За последние 24 часа нас посетили 51662 программиста и 1761 робот. Сейчас ищут 822 программиста ...

Нервы, массивы, php

Тема в разделе "PHP для новичков", создана пользователем drakonik999, 3 апр 2018.

  1. drakonik999

    drakonik999 Активный пользователь

    С нами с:
    5 сен 2017
    Сообщения:
    156
    Симпатии:
    0
    Есть массив
    $ar[1] = 1;
    $ar[2] = 0;
    $ar[6] = "";
    $ar[8] = 1;
    $ar[9] = 0;

    Первое что я хочу сделать это убрать пустые строки типа " " но когда я убираю вместе с ними убираются и нули, а надо чтобы нули оставались.
    И как мне упорядочить индексы массива?
     
  2. Алекс@ндр

    Алекс@ндр Активный пользователь

    С нами с:
    2 фев 2018
    Сообщения:
    3
    Симпатии:
    0
    Может быть надо использовать === вместо ==
    --- Добавлено ---
    PHP:
    1. <?php
    2.  
    3. $ar[1] = 1;
    4. $ar[2] = 0;
    5. $ar[6] = "";
    6. $ar[8] = 1;
    7. $ar[9] = 0;
    8.  
    9. echo "Массив до\r\n";
    10. var_dump($ar);
    11. $ar_f = array_filter($ar,'filterArray');
    12.  
    13. function filterArray($i){
    14.         if($i !== "")return true;
    15.         return false;
    16.  
    17. }
    18. echo "Массив после\r\n";
    19.  
    20. var_dump($ar_f);

    Код (Text):
    1. Массив до
    2. array(5) {
    3.   [1]=>
    4.   int(1)
    5.   [2]=>
    6.   int(0)
    7.   [6]=>
    8.   string(0) ""
    9.   [8]=>
    10.   int(1)
    11.   [9]=>
    12.   int(0)
    13. }
    14. Массив после
    15. array(4) {
    16.   [1]=>
    17.   int(1)
    18.   [2]=>
    19.   int(0)
    20.   [8]=>
    21.   int(1)
    22.   [9]=>
    23.   int(0)
    24. }

    Ну вот ещё вариант, сразу и упорядочим индексы, то есть не упорядочим, а переиндексуем

    PHP:
    1. <?php
    2. $ar[1] = 1;
    3. $ar[2] = 0;
    4. $ar[6] = "";
    5. $ar[8] = 1;
    6. $ar[9] = 0;
    7. var_dump($ar);
    8. foreach($ar as $key => $i){
    9.         if($i !== ""){
    10.            $b[] = $i;
    11.         }
    12. }
    Код (Text):
    1. array(5) {
    2.   [1]=>
    3.   int(1)
    4.   [2]=>
    5.   int(0)
    6.   [6]=>
    7.   string(0) ""
    8.   [8]=>
    9.   int(1)
    10.   [9]=>
    11.   int(0)
    12. }
    13. array(4) {
    14.   [0]=>
    15.   int(1)
    16.   [1]=>
    17.   int(0)
    18.   [2]=>
    19.   int(1)
    20.   [3]=>
    21.   int(0)
    22. }
     
    #2 Алекс@ндр, 3 апр 2018
    Последнее редактирование: 3 апр 2018
  3. gruth

    gruth Активный пользователь

    С нами с:
    13 май 2017
    Сообщения:
    224
    Симпатии:
    18
    PHP:
    1. $ar = array_filter($ar,function((string) $v){
    2.    return $v !== '';
    3. });
    по красоте)
     
  4. виталий032

    виталий032 Активный пользователь

    С нами с:
    31 янв 2014
    Сообщения:
    227
    Симпатии:
    30
    Адрес:
    Владивосток
    array_values() для слабаков или он нули стирает?

    [Updated]
    Ну ТС не говорил, что ключи перетирать нельзя. Так что этот вариант тоже имеет место быть.

    [Updated]
    Окей. Stackoverflow - первая ссылка.
    Фильтруем:
    PHP:
    1. $new_array = array_diff($old_array, array(''));
    Переиндексируем:
    PHP:
    1. $new_array = $array_values($new_array);
     
    #4 виталий032, 3 апр 2018
    Последнее редактирование: 3 апр 2018
  5. gruth

    gruth Активный пользователь

    С нами с:
    13 май 2017
    Сообщения:
    224
    Симпатии:
    18
    ключи перетирает, а так хз)

    да, и не фильтрует массив
     
  6. Sail

    Sail Старожил

    С нами с:
    1 ноя 2016
    Сообщения:
    1.593
    Симпатии:
    362
    @drakonik999, выложите код, что-ли... тогда будет что подсказать. Вариантов решения ведь - море!
     
  7. drakonik999

    drakonik999 Активный пользователь

    С нами с:
    5 сен 2017
    Сообщения:
    156
    Симпатии:
    0