boş () geçerli bir geri çağırma?

5 Cevap php

Ben php dizi haritalama () boş kullanmaya çalışıyorum. Ben geçerli bir geri çağırma olmadığını hataları alıyorum.

$ cat test.php
<?

$arrays = array(
   'arrEmpty' => array(
        '','',''
    ),
);

foreach ( $arrays as $key => $array ) {

        echo $key . "\n";
        echo array_reduce( $array, "empty" );
        var_dump( array_map("empty", $array) );
        echo "\n\n";

}

$ php test.php
arrEmpty

Warning: array_reduce(): The second argument, 'empty', should be a valid callback in /var/www/authentication_class/test.php on line 12

Warning: array_map(): The first argument, 'empty', should be either NULL or a valid callback in /var/www/authentication_class/test.php on line 13
NULL

Bu işe gerekmez mi?

Uzun hikaye: (? Çok) Ben zeki olmaya çalışıyorum ve tüm dizi değerleri boş dizeleri olmadığını kontrol ediyorum.

5 Cevap

empty bir dil oluşumu bir işlev değil çünkü bulunuyor. manual on empty(): kaynaktan

Not: Bu bir dil oluşumudur ve bir fonksiyonu olduğundan, değişken işlevler kullanılarak denilen olamaz

Başkalarına eklemek için, PHP geliştiricileri bu gibi bir işlevi oluşturmak için yaygın:

function isEmpty($var)
{
    return empty($var);
}

Boş bir geri olarak kullanılamaz, bu bir değişken üzerinde çalışması gerekir. Kimden manual:

Not: () boş yalnızca başka bir şey, bir çözümleme hatası neden olacak gibi değişkenleri kontrol eder. Diğer bir deyişle, aşağıdaki çalışmaz: boş (trim ($ isim)).

Nasılsa boş (), bir geri arama içinde benim için çalıştı, neden bilmiyorum.

Benim sınıf içinde iken ben, bağımsız bir fonksiyonu olarak geri arama çalışıyordu ve ben ('func_name', & $ this) dizi kullanarak aramak zorunda kaldım çünkü ben aslında bu hatayı alıyorum neden neden oldu

Aşağıdaki kod bakın. Bu benim için çalışıyor. Bu konularda ben, 5.2.8 php am ...

$table_values = array_filter( $table_values, array(&$this, 'remove_blank_rows') );

function remove_blank_rows($row){


        $not_blank = false;

        foreach($row as $col){
            $cell_value = trim($col);
            if(!empty( $cell_value )) {
                $not_blank = true;
                break;
            }
        }

        return $not_blank;

}