Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Проверка на пустоту полей


Автор: s1lver 28.9.2014, 15:48
Доброго времени суток!

Есть массив с ключами вида:

Код

test_2_0_0_type
test_2_1_0_type
test_2_2_0_type
test_2_3_0_type

test_2_0_1_type
test_2_1_1_type
test_2_2_1_type
test_2_3_1_type

test_3_0_0_type


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

Автор: ksnk 28.9.2014, 19:23
пересобрать массив в массив групп.
проверить целый массив на наличие непустых значений можно, например, так
Код

$x=array(
'test_0_0_0_xxx1'=>'',
'test_0_0_0_xxx2'=>'',
'test_0_0_0_xxx3'=>'',
);
count(array_diff($x,array('')))>0

Автор: s1lver 30.9.2014, 13:18
Цитата

пересобрать массив в массив групп.
проверить целый массив на наличие непустых значений можно, например, так


Как-то это не очень работает...

Вот так, конечно, ближе

Код

            $x=array(
                'test_0_0_0_xxx1'=>'',
                'test_0_0_0_xxx2'=>'',
                'test_0_0_0_xxx3'=>'',
            );
            if(count(array_diff($x, [''])) === count($x)){
                die("true");
            }else{
                die("false");
            }

но, что-то не так  smile 



Хотя итоговый массив получается такой

Код

array(9) {
  ["test_0_0_0_1"]=>  string(10) "1234567890"
  ["test_0_0_0_2"]=>  string(14) "йцукенгшщзфыва"
  ["test_0_0_0_3"]=>  string(5) "rerer"
  ["test_0_0_0_4"]=>  string(4) "rere"
  ["test_0_0_0_5"]=>  string(10) "04.09.2014"
  ["test_0_0_0_6"]=>  string(14) "йцукенгшщзфыва"
  ["test_0_0_0_7"]=>  string(4) "7676"
  ["test_0_0_0_8"]=>  string(3) "576"
  ["test_0_0_0_9"]=>  string(11) "йцукенгшщзх"
}

Автор: baldina 30.9.2014, 15:04
если только проверить, можно обычным циклом без построения массива типа
Код

  foreach ($x as $key=>$value){
     if (preg_match("/^test_$group/",$key))
       if (empty($value))
         return true;
  }
  // else
  return false;

если подмассив группы выделен в отдельный массив, можно при помощи reduce
Код

array_reduce ($x, function ($result, $value) {
    return $result and !empty($value);
  }, true);

Автор: s1lver 1.10.2014, 15:28
Похоже понял в чем проблема. Иногда в этот массив попадает вот такая запись, которая все ломает
Код

  ["test_0_0_0_10"]=>
  array(2) {
    [0]=>
    string(1) "1"
    [1]=>
    string(1) "2"
  }

 smile 

Проблему решил, всем спасибо!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)