values orden keys invertir array arrays drupal drupal-modules php

arrays - orden - array_flip(): ¡solo puede voltear STRING e INTEGER values! en DrupalDefaultEntityController-> load()



php array intersect (10)

Recientemente migré mi módulo a Drupal7 (en PHP Versión 5.3.1) y ahora recibo los siguientes errores:

* 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).

También intenté actualizar otros módulos y core a las últimas versiones, como se menciona aquí http://drupal.org/node/1022736

entidad 7.x-1.x-dev (2011-ene-24), vistas 7.x-3.x-dev (2011-ene-22), núcleo Drupal 7.x-dev (2011-ene-24) , profile2 7.x-1.0-beta1, referencias 7.x-2.x-dev (2011-ene-14), ctools 7.x-1.0-alpha2

No puedo descifrar qué causa exactamente este error.

Editar:

De acuerdo con http://php.net/manual/en/function.array-flip.php ,

array_flip () devuelve una matriz en orden inverso, es decir, las claves de trans se convierten en valores y los valores de trans se convierten en claves.

Tenga en cuenta que los valores de trans deben ser claves válidas, es decir, deben ser enteros o de cadena. Se emitirá una advertencia si un valor tiene el tipo incorrecto, y el par de clave / valor en cuestión no se invertirá.

He hecho el var_dump($ids); antes de la línea 178 en entity.inc ( $passed_ids = !empty($ids) ? array_flip($ids) : FALSE; )

Y me parece que el par clave / valor siempre está en el formato correcto (?).

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)


¡Gracias por la publicación que funcionó para mí !, me encontré con este problema en Drupal 7 desde hace mucho tiempo y pude resolver el problema. Línea de fondo

"No pase valores de matriz a array_flip para ningún tipo de entidades, por ejemplo: si está intentando cargar y la entidad user_load () o field_collection_item_load () para cargar elementos de colección de campo, pase solo valores en la cadena en lugar de la matriz misma".

¡¡Gracias!!


¿Estás usando Insertar módulo? Ver http://drupal.org/node/850946 .

Cuando se trata de errores específicos como este, creo que es mejor buscar la cola de problemas en drupal.org que preguntar por SO.


Aquí hay una solución simple :)

Edite el archivo settings.php y agregue esta línea

error_reporting(0);


Ejemplo de buen uso:

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


El problema surge cuando usa el acceso de campo de grupos orgánicos (Grupos orgánicos 7.x-1.3)

Por lo general, puede desactivar ese submódulo a menos que haga un control de acceso a nivel de campo con OG.

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


Esto podría ser un problema de codificación incorrecta (por ejemplo, cargando entidades inválidas o ejecutando algún viejo código de Drupal 6 en Drupal 7):

  • Si tienes módulos personalizados, revisa tu código para ver si hay un error común
  • Si está utilizando el módulo contrib, encuentre el error correcto en su contra y aplique el parche (si está disponible) o suba el nuevo.

Solución de problemas:

  • Puede intentar volcar la print_r(debug_backtrace()) llamando e imprimiendo print_r(debug_backtrace()) ,
  • Use su herramienta scm para volver al punto donde funcionaba bien y compare los cambios, para que finalmente encuentre dónde está el problema (por ejemplo, gitk , git log --patch , etc.)
  • utilice el módulo de revisión del codificador para encontrar errores en su código después de la actualización (por ejemplo, drush --contrib --no-empty --upgrade7x coder-review ).
  • Instale XDebug para rastrear su problema mediante el registro de rastreo o la depuración paso a paso.

Alternativamente, puede depurar su código definiendo el siguiente enlace temporal:

/** * 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()); } }

Borre la memoria caché antes de probarla.

Imprimirá la traza inversa en cada advertencia de PHP o error con argumentos, para que pueda encontrar los parámetros no válidos que se pasaron al núcleo de Drupal.



La causa más común de este error es usar una función something_load () con una matriz como argumento. Esto ya no es soportado porque las funciones load_multiple () necesitan ser usadas para esto ahora.

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

Entonces, la forma más fácil de detectar esto es buscar "_load (array".


Me encontré con el mismo error array_flip durante el fin de semana, tratando de actualizar un módulo personalizado a Drupal 7. El problema es que una matriz anidada se pasa a DrupalDefaultEntityController, pero está esperando una matriz simple de enteros o cadenas. En mi caso, estaba pasando una matriz anidada a EntityFieldQuery, cuando solo quiere una matriz de enteros.

Para rastrear mejor el código que llama a DrupalDefaultEntityController, intente insertar lo siguiente antes de la línea 178 en entity.inc:

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

... o preferiblemente, instale el módulo Devel e intente insertar lo siguiente en su lugar:

dpm( debug_backtrace() );