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").
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)
当您使用"有机组"字段访问时,问题出现了(有机组7.x-1.3)
除非您使用OG进行字段级访问控制,否则通常可以禁用该子模块.
http://drupal.org/node/1102570#comment-5626946