2014-02-09 2 views
5

Я начинаю программировать на PHP. Может кто-нибудь предложит мне какой-нибудь трюк? Как я могу сократить этот скрипт с помощью любой функции цикла?Проверьте, нет ли всех элементов массива

$org[1] = $_POST['name']; 
$org[2] = $_POST['street']; 
$org[3] = $_POST['city']; 
$org[4] = $_POST['postal_code']; 
$org[5] = $_POST['org_nmr']; 
$org[6] = $_POST['tin']; 

if (
    (empty($org[1])) 
    && (empty($org[2])) 
    && (empty($org[3])) 
    && (empty($org[4])) 
    && (empty($org[5])) 
    && (empty($org[6])) 
) { 
    echo 'Not enter have no data'; 
} 

Я думаю, что это можно сделать как-то. Но я не знаю, как это сделать.

+0

возможно дубликат [Как проверить каждое значение в массиве пусто?] (http://stackoverflow.com/questions/21203149/how-to-check-each-value-in-an-array-is-empty) – Gajus

+0

Интересно, как этот вопрос может получить пять upvotes. И только вы не знаете, это не значит, что вам нужно спросить. Должен признаться, что первый поиск (предложенный дубликат не очень хорошо выбран). – hakre

+0

PS> вы всегда должны начинать отсчет с 0 NOT 1 ... кроме того, вам не нужно делать это так, вы должны иметь соответствующие имена в вашем массиве $ org ["name"] = _ $ POST [' name '] и т. д. –

ответ

2

Этот простой ответ адаптирован под вопрос пользователя (он не учитывает массивы, значениями которых являются массивы/объекты и т. Д.).

$data = trim(implode('',$org)); 
if (strlen($data) === 0){ 
... 
} 

Я изменился с пустой ($ данных) для STRLEN ($ данных) === 0, если условие в случае, имеющий нулевое значение не является пустой ситуация для вас; потому что, поскольку мы знаем, что пустые ($ data) будут истинны, когда $ data = '0')

1

Вы можете избежать повторения с помощью цикла. Это может также иметь большее значение для сохранения названного ассоциативного массива, а не числового индекса для $org.

$org = array(); 
foreach($_POST as $name => $value) { 
    If (! empty($value)) { 
    $org[$name] = $value; 
    } 
} 
If (empty($org)) { //... Error here 
1

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

не требуется никакого цикла вообще, что Еогеасп используется только для отсутствующих ключей вывода, а не делать чек

<?php 
$required = array_flip(array('key_a', 'key_b')); // list of required keys, just used array_flip for ease of writing 
$post = array('key_a' => 'a value'); // your $_POST array 
$check = array_diff_key($required, $post); 
if(!empty($check)) { 
    // foreach not required as answer to your question, just to point missing keys out. 
    foreach($check as $key => $value) { 
     echo $key, 'key is missing!', PHP_EOL; 
    } 
    die('Some message'); 
} 
0
$values = array('name', 'street', 'city', 'postal_code', 'org_nmr', 'tin'); 
$getLength = function($val, $post_data){ 
    return is_null($post_data[$val]) ? 0 : strlen($post_data[$val]); 
}; 
if(array_sum(array_map($getLength, $values, $_POST)) == 0){ 
    echo 'Nezadal(a) jste žádné údaje'; 
} 

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

Затем вы сопоставляете эту функцию со всеми элементами и затем суммируете ее.

1

вы можете использовать array_filter встроенную функцию,

if(count(array_filter($_POST)) == 0) 
    echo 'Nezadal(a) jste žádné údaje'; 
+0

Не будет работать для '' 0''. – Gumbo

+0

try 'if (! Array_filter ($ _ POST))' вместо .. –

+0

Нет, я имел в виду ['' 0'' считается ложным] (http://php.net/manual/en/language.types.boolean. PHP # language.types.boolean.casting), который 'array_filter' будет отфильтровываться, если функция обратного вызова не будет передана, i. e., 'array_filter (array ('0')) === array()'. – Gumbo

0

удивил никто не упомянул in_array?

if (in_array("", (array) $org)) { 
    echo "something is empty in this array"; 
} 

дубля на человека выше, я бы бросил $ орг возможно:

$test = trim(implode('', (array) $org)); 
if (strlen($test) === 0){ 
    ... 
} 

Другие примеры:

$arr0 = array('Hello', 'World!', 'Beautiful', 'Day!'); 
$arr1 = array("something" => 'here'); 
$arr2 = array("something" => ''); 
$arr3 = array(); 
$arr4 = "string"; 
$arr5 = 34; 
$arr6 = ''; 

$test = trim(implode('', (array)$arr0)); 
if (strlen($test) === 0) { 
    echo "No data in this array"; 
} else { 
    echo "Data in this array \n"; 
} 


$test = trim(implode('', (array)$arr1)); 
if (strlen($test) === 0) { 
    echo "No data in this array\n"; 
} else { 
    echo "Data in this array \n"; 
} 

$test = trim(implode('', (array)$arr2)); 
if (strlen($test) === 0) { 
    echo "No data in this array\n"; 
} else { 
    echo "Data in this array \n"; 
} 

$test = trim(implode('', (array)$arr3)); 
if (strlen($test) === 0) { 
    echo "No data in this array\n"; 
} else { 
    echo "Data in this array \n"; 
} 

$test = trim(implode('', (array)$arr4)); 
if (strlen($test) === 0) { 
    echo "No data in this array\n"; 
} else { 
    echo "Data in this array \n"; 
} 

$test = trim(implode('', (array)$arr5)); 
if (strlen($test) === 0) { 
    echo "No data in this array\n"; 
} else { 
    echo "Data in this array \n"; 
} 


$test = trim(implode('', (array)$arr6)); 
if (strlen($test) === 0) { 
    echo "No data in this array\n"; 
} else { 
    echo "Data in this array \n"; 
} 
Смежные вопросы