سؤال

أحاول استخدام فارغة () في رسم خرائط الصفيف في PHP. أحصل على أخطاء في أنها ليست رد اتصال صالح.

$ 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

ألا يجب أن يعمل هذا؟

قصة طويلة: أحاول أن أكون (أيضًا؟) ذكي والتحقق من أن جميع قيم الصفيف ليست سلاسل فارغة.

هل كانت مفيدة؟

المحلول

انه بسبب empty هو بناء اللغة وليس وظيفة. من دليل على فارغة ():

ملاحظة: لأن هذا عبارة عن بنية لغوية وليس وظيفة ، لا يمكن تسميتها باستخدام وظائف متغيرة

نصائح أخرى

محاولة array_filter بدون رد اتصال بدلاً من ذلك:

إذا لم يتم توفير رد اتصال ، فسيتم إزالة جميع إدخالات الإدخال مساوية للمشاركة (انظر التحويل إلى منطقية).

يمكنك بعد ذلك الاستخدام count(array_filter($array)) لمعرفة ما إذا كان لا يزال لديه قيم.

أو ببساطة التفاف فارغًا في قابلة للاتصال ، مثل هذا:

array_reduce($array, create_function('$x', 'return empty($x);'));

أو اعتبارا من PHP 5.3

array_reduce($array, function($x) { return empty($x); });

للإضافة إلى الآخرين ، من الشائع لمطوري PHP إنشاء وظيفة مثل هذه:

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

لا يمكن استخدام فارغ كرد فعل ، فهو يحتاج إلى العمل على متغير. من كتيب:

ملاحظة: فارغة () فقط تتحقق من المتغيرات لأن أي شيء آخر سيؤدي إلى خطأ في التحليل. بمعنى آخر ، لن يعمل ما يلي: فارغ (تقليم (اسم $)).

لا أعرف لماذا ، بطريقة ما فارغة () عملت بالنسبة لي داخل رد الاتصال.

السبب في أنني كنت أحصل في الأصل على هذا الخطأ هو أنني كنت أحاول رد الاتصال كدالة مستقلة ، في حين كان داخل صفي واضطررت إلى الاتصال به باستخدام Array (& $ هذا ، "func_name")

انظر الرمز أدناه. إنه يعمل بالنسبة لي. أنا PHP 5.2.8 ، إذا كان هذا يهم ...

$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;

}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top