Warning: usort(): Array was modified by the user comparison function

Si tienes la mala suerte de trabajar con un servidor de PHP 5.X seguramente sufras de un bug que provoca un warning al trabajar con arrays. Si recibes el siguiente error Warning: usort(): Array was modified by the user comparison function este artículo puede interesarte.

¿Qué está pasando?

Algunas funciones de debug de PHP al examinar un array cambian alguna referencia interna y engañan a usort() haciéndole pensar que los datos han cambiado. De ese modo se lanza un warning aunque en el código realmente no se haya modificación de ninguna forma.

Podéis ver más información sobre el bug en php.net.

¿Como solucionarlo?

Si bien existen otras formas de provocar el bug nos centraremos en el que ocurre usando usort. Hay tres formas de solucionar el bug, no usando usort, silenciando los warnings de esta función con @ @usort() o usando error_reporting para evitar los warnings en toda la aplicación.

¿No estas usando usort() y aún así recibes este error?

Si usas Symfony y DoctrineFixture recibirás este error al hacer php bin/console doctrine:fixture:load. Para evitarlo puedes modificar el fichero: “/vendor/doctrine/data-fixtures/lib/Doctrine/Common/DataFixtures/Loader.php” y en la linea 211 tenemos la maldita usort a la que podemos “silenciar” con @.

Esta solución tiene el problema de que puede ser machacada en cualquier momento por un composer update pero es la más rápida para salir del paso y nos permite cargar los fixtures y continuar trabajando.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *