array_flip():只能翻转STRING和INTEGER值!在DrupalDefaultEntityController-> load()中

Aji*_*rni 39 php arrays drupal drupal-modules

我最近将我的模块迁移到Drupal7(在PHP版本5.3.1上),现在我收到以下错误:

    * Warning: array_flip() [function.array-flip]: Can only flip STRING and INTEGER values! in DrupalDefaultEntityController->load() (line 178 of C:\Users\akulkarni\Desktop\xampp\htdocs\servicecasting\includes\entity.inc).
    * Warning: array_flip() [function.array-flip]: Can only flip STRING and INTEGER values! in DrupalDefaultEntityController->load() (line 178 of C:\Users\akulkarni\Desktop\xampp\htdocs\servicecasting\includes\entity.inc).
    * Warning: array_flip() [function.array-flip]: Can only flip STRING and INTEGER values! in DrupalDefaultEntityController->load() (line 178 of C:\Users\akulkarni\Desktop\xampp\htdocs\servicecasting\includes\entity.inc).
    * Warning: array_flip() [function.array-flip]: Can only flip STRING and INTEGER values! in DrupalDefaultEntityController->cacheGet() (line 354 of C:\Users\akulkarni\Desktop\xampp\htdocs\servicecasting\includes\entity.inc).
    * Warning: array_flip() [function.array-flip]: Can only flip STRING and INTEGER values! in DrupalDefaultEntityController->load() (line 178 of C:\Users\akulkarni\Desktop\xampp\htdocs\servicecasting\includes\entity.inc).
    * Warning: array_flip() [function.array-flip]: Can only flip STRING and INTEGER values! in DrupalDefaultEntityController->cacheGet() (line 354 of C:\Users\akulkarni\Desktop\xampp\htdocs\servicecasting\includes\entity.inc).
    * Warning: array_flip() [function.array-flip]: Can only flip STRING and INTEGER values! in DrupalDefaultEntityController->load() (line 178 of C:\Users\akulkarni\Desktop\xampp\htdocs\servicecasting\includes\entity.inc).
    * Warning: array_flip() [function.array-flip]: Can only flip STRING and INTEGER values! in DrupalDefaultEntityController->cacheGet() (line 354 of C:\Users\akulkarni\Desktop\xampp\htdocs\servicecasting\includes\entity.inc).
Run Code Online (Sandbox Code Playgroud)

我还尝试将其他模块和核心升级到最新版本,如http://drupal.org/node/1022736所述

实体7.x的-1.x的-dev的(2011-JAN-24),视图7.x的-3.X-dev的(2011-JAN-22),Drupal核心7.x的-dev的(2011-JAN-24) ,profile2 7.x-1.0-beta1,引用7.x-2.x-dev(2011年1月14日),ctools 7.x-1.0-alpha2

我无法弄清楚究竟是什么导致了这个错误?

编辑:

根据http://php.net/manual/en/function.array-flip.php,

array_flip()以翻转顺序返回一个数组,即来自trans的键成为值,而来自trans的值成为键.

请注意,trans的值必须是有效键,即它们必须是整数或字符串.如果值的类型错误,将发出警告,并且不会翻转有问题的键/值对.

var_dump($ids);在entity.inc($passed_ids = !empty($ids) ? array_flip($ids) : FALSE;)中完成了第178行之前的操作

在我看来,键/值对总是以正确的格式(?).

array
  0 => 
    array
      'nid' => string '6' (length=1)

array
  0 => 
    array
      'uid' => string '1' (length=1)

array
  0 => string '0' (length=1)

array
  0 => 
    array
      'nid' => string '7' (length=1)

array
  0 => 
    array
      'nid' => string '4' (length=1)

array
  0 => 
    array
      'nid' => string '8' (length=1)
Run Code Online (Sandbox Code Playgroud)

Ber*_*dir 86

导致此错误的最常见原因是使用带有数组作为参数的something_load()函数.这不再受支持,因为现在需要使用load_multiple()函数.

D6中的示例:

<?php
// Using array with the id was already discouraged in D6 but still worked.
$user = user_load(array('uid' => 1));
$user = user_load(array('name' => 'admin'));
?>
Run Code Online (Sandbox Code Playgroud)

Drupal 7:

<?php
// Argument to a load() function *must* be a single id
$user = user_load(1);

// Querying for another attribute is a bit more complex.
// Note that using reset(user_load_multiple() directly is not E_STRICT compatible.
$users = user_load_multiple(array(), array('name' => 'admin'));
$user = reset($users);
?>
Run Code Online (Sandbox Code Playgroud)

因此,捕获这些的最简单方法是搜索"_load(array").

  • 或者如果您尝试将null/false值传递给加载函数,例如:$ nid = null; node_load($ NULL); (2认同)

Mat*_* V. 10

我在周末遇到了同样的array_flip错误,尝试将自定义模块升级到Drupal 7.问题是嵌套数组被传递到DrupalDefaultEntityController,但它期望一个简单的整数或字符串数​​组.在我的例子中,我将一个嵌套数组传递给EntityFieldQuery,当它只需要一个整数数组时.

要更好地跟踪调用DrupalDefaultEntityController的代码,请尝试在entity.inc中的第178行之前插入以下内容:

drupal_set_message(var_export(debug_backtrace(), TRUE));
Run Code Online (Sandbox Code Playgroud)

...或者最好安装Devel模块并尝试插入以下内容:

dpm( debug_backtrace() );
Run Code Online (Sandbox Code Playgroud)


Joh*_*ore 6

当您使用"有机组"字段访问时,问题出现了(有机组7.x-1.3)

除非您使用OG进行字段级访问控制,否则通常可以禁用该子模块.

http://drupal.org/node/1102570#comment-5626946