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

我最近将模块迁移到了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). 

我也尝试升级其他模块和核心到最新版本在这里提到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-Jan-14),ctools 7.x-1.0-alpha2

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

编辑:

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

array_flip()返回按顺序排列的数组,即来自trans的键成为值,来自trans的值成为键。

请注意,trans的值需要是有效的键,即它们需要是整数或string。 如果值的types错误,则会发出警告,并且所涉及的键/值对不会被翻转。

我做了var_dump($ids); $passed_ids = !empty($ids) ? array_flip($ids) : FALSE;

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

 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) 

这个错误的最常见的原因是使用一个数组作为参数的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')); ?> 

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); ?> 

所以,最简单的方法是search“_load(array”)。

我在周末遇到了同样的array_flip错误,试图升级自定义模块到Drupal 7.问题是嵌套数组传递到DrupalDefaultEntityController,但它期望一个简单的整数或string数​​组。 在我的情况下,我只是传入一个嵌套数组到EntityFieldQuery,当它只需要一个整数数组。

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

 drupal_set_message(var_export(debug_backtrace(), TRUE)); 

…或者最好安装Devel模块,然后尝试插入以下内容:

 dpm( debug_backtrace() ); 

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

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

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

当你使用一个不是实体id数组的数组来调用entity_load时,也会发生这种情况 – 请参阅http://api.drupal.org/api/drupal/includes–common.inc/function/entity_load/ 7和http://drupal.org/node/1160566来理解为什么。;

在我们使用最新的page_title模块中看到类似的问题。 现在,我们只是禁用模块,它清理错误。

请参阅: http : //www.newblood.com/blog/2011/04/26/drupal-7-error-in-page-title-module/

你在使用插入模块吗? 参见http://drupal.org/node/850946

当涉及到这样的具体错误时,我认为你最好在drupal.org上search问题队列,而不是在SO上查询。

好用的例子:

 <?php $user=user_load(arg(1)); $username=$user->name; print strtolower(preg_replace('/[^a-zA-Z0-9\-]/si' , '-' , $username)); ?> 

这可能是错误编码的问题(例如,加载无效的实体或在Drupal 7中运行一些旧的Drupal 6代码):

  • 如果您有任何自定义模块,请仔细检查您的代码是否存在常见错误
    • entity_load()的使用无效,
    • 将加载对象的数组传递给entity_load(),
    • 检查实体API和示例模块 ,它提供了在Drupal 7中使用实体的正确方法。
  • 如果你使用的是contrib模块,find正确的错误并应用补丁(如果有的话)或提出新的补丁。

故障排除:

  • 您可以尝试通过调用并打印print_r(debug_backtrace())来转储回溯,
  • 使用你的scm工具回到工作正常的地步,比较这些变化,所以最终你会发现问题出在哪里(比如gitkgit log --patch等等)
  • 请使用Coder Review模块在更新后查找代码中的错误(例如drush --contrib --no-empty --upgrade7x coder-review )。
  • 安装XDebug ,通过跟踪日志或逐步debugging来跟踪您的问题。

或者,你可以通过定义下面的临时钩子来debugging你的代码:

 /** * Implements hook_watchdog(). */ function foo_watchdog($log_entry) { if ($log_entry['type'] == 'php' && $log_entry['severity'] <= WATCHDOG_WARNING) { // Old school var_dump(debug_backtrace()); // Optionally add: exit(); // Devel: Log the backtrace into temporary file: drupal_debug.txt // Locate via: $ drush eval "echo file_directory_temp() . '/drupal_debug.txt'" function_exists('dd') && dd(debug_backtrace()); } } 

在testing之前清除caching。

它会在每个PHP警告或错误的参数上打印回溯,所以你可以find传入Drupal核心的无效参数。

感谢post,它为我工作!,我在Drupal 7长时间遇到这个问题,并可能克服这个问题。 底线

“不要将数组的值传递给array_flip,例如:如果您正在尝试加载实体user_load()或field_collection_item_load()以加载字段集合项,则只传递string中的值而不是数组本身。

谢谢!!

这是简单的解决scheme:)

编辑settings.php文件并添加这一行

 error_reporting(0);