فارغ () ليس رد اتصال صالح؟
سؤال
أحاول استخدام فارغة () في رسم خرائط الصفيف في 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;
}