array_flip(): Kann nur STRING- und INTEGER-Werte umkehren! in DrupalDefaultEntityController->load()

Lesezeit: 6 Minuten

Benutzer-Avatar
Ajinkya Kulkarni

Ich habe kürzlich mein Modul auf Drupal7 (auf PHP Version 5.3.1) migriert und erhalte jetzt folgende Fehler:

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

Ich habe auch versucht, andere Module und den Kern auf die neuesten Versionen zu aktualisieren, wie hier erwähnt http://drupal.org/node/1022736

Entity 7.x-1.x-dev (2011-Jan-24), Views 7.x-3.x-dev (2011-Jan-22), Drupal Core 7.x-dev (2011-Jan-24) , profile2 7.x-1.0-beta1, Referenzen 7.x-2.x-dev (2011-Jan-14), ctools 7.x-1.0-alpha2

Ich kann nicht herausfinden, was genau diesen Fehler verursacht?

Bearbeiten:

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

array_flip() gibt ein Array in umgekehrter Reihenfolge zurück, dh Schlüssel von trans werden zu Werten und Werte von trans werden zu Schlüsseln.

Beachten Sie, dass die Werte von trans gültige Schlüssel sein müssen, dh sie müssen entweder Integer oder String sein. Wenn ein Wert den falschen Typ hat, wird eine Warnung ausgegeben, und das betreffende Schlüssel/Wert-Paar wird nicht umgedreht.

Ich habe das getan var_dump($ids); vor Zeile 178 in entity.inc ( $passed_ids = !empty($ids) ? array_flip($ids) : FALSE;)

Und es scheint mir, dass das Schlüssel/Wert-Paar immer im richtigen Format ist (?).

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)

  • Haben Sie Ihr Modul oder Ihre Website auf Drupal 7 migriert? Wenn es sich um ein benutzerdefiniertes Modul handelt, wo ist der Code? Sie sollten auch versuchen, Module auszuschalten, bis die Warnungen verschwinden, um sie weiter einzugrenzen. Irgendetwas gibt die falschen Parameter an.

    – Michael Papille

    25. Januar 2011 um 20:12 Uhr

  • Ja, ich habe mein Modul auf Drupal 7 migriert. Aber der Fehler liegt in der Datei entity.inc, die eine Kerndatei von Drupal 7 ist.

    – Ajinkya Kulkarni

    25. Januar 2011 um 20:55 Uhr

  • Bezüglich der var_dump-Ausgabe oben: Nein, in dem Schlüssel/Wert-Paar ist nicht im richtigen Format. Die Funktion array_flip kann ein Array wie folgt umdrehen array(0 => 'a')aber nicht array(0 => array(0 => 'a')) weil das verschachtelte Array zum Array-Schlüssel werden müsste.

    – marcvangend

    25. Januar 2011 um 22:59 Uhr

Die häufigste Ursache für diesen Fehler ist die Verwendung einer Funktion something_load() mit einem Array als Argument. Dies wird nicht mehr unterstützt, da dafür jetzt die load_multiple()-Funktionen verwendet werden müssen.

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

Der einfachste Weg, diese abzufangen, ist also, nach “_load(array)” zu suchen.

  • Ich danke dir sehr. Das war das Problem. Ich habe $node = node_load(array(‘nid’ => $node->nid)); und $thisUser = user_load(array(‘uid’ => $service->uid)) an vielen Stellen. Vielen Dank auch für den Tipp, eine schnelle Suche mit “_load (array)” durchzuführen. Das war brillant!

    – Ajinkya Kulkarni

    26. Januar 2011 um 20:31 Uhr


  • Vielen Dank. Ich habe Beispiele für eine solche Verwendung sogar im Kern gefunden: form.inc, Trigger-Modul. Auch die Community-Module “pathauto” & “page_title” verwenden noch die alte Syntax.

    – Fedir Rykhtik

    29. Juni 2011 um 10:06 Uhr

  • oder wenn Sie versuchen, null/false-Werte an Ladefunktionen zu übergeben, zB: $nid=null; node_load($null);

    – Pawel Dubiel

    14. Februar 2012 um 17:34 Uhr

  • Nur um hinzuzufügen, entity_load() erfordert, dass die IDs ein Array sind, dh entity_load('field_collection_item', array(123));

    – Charlie Schliesser

    23. Februar 2012 um 23:53 Uhr

Ich bin am Wochenende auf den gleichen array_flip-Fehler gestoßen, als ich versuchte, ein benutzerdefiniertes Modul auf Drupal 7 zu aktualisieren. Das Problem ist, dass ein verschachteltes Array an DrupalDefaultEntityController übergeben wird, aber es erwartet ein einfaches Array von Ganzzahlen oder Zeichenfolgen. In meinem Fall habe ich ein verschachteltes Array an EntityFieldQuery übergeben, wenn es nur ein Array von Ganzzahlen haben möchte.

Um den Code, der DrupalDefaultEntityController aufruft, besser aufzuspüren, versuchen Sie Folgendes vor Zeile 178 in entity.inc einzufügen:

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

… oder am besten installieren Sie die Entwicklung Modul und versuchen Sie stattdessen Folgendes einzufügen:

dpm( debug_backtrace() );

Das Problem tritt auf, wenn Sie den Feldzugriff für organische Gruppen verwenden (Organic Groups 7.x-1.3)

Sie können dieses Untermodul normalerweise deaktivieren, es sei denn, Sie führen die Zugriffskontrolle auf Feldebene mit OG durch.

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

  • Das war mein Problem – ich habe es geschafft, herauszufinden, was eingesandt wurde, und es waren viele Arrays, die aus Array (0 => NULL) bestanden.

    – Verrückter Joe Malloy

    27. April 2012 um 23:21 Uhr

Dies kann auch passieren, wenn Sie entity_load mit einem Array aufrufen, das kein Array von Entitäts-IDs als zweites Argument ist – siehe http://api.drupal.org/api/drupal/includes–common.inc/function/entity_load/7 und http://drupal.org/node/1160566 zu verstehen warum.

Wir haben ein ähnliches Problem bei unserer Verwendung des neuesten Moduls page_title gesehen. Im Moment haben wir das Modul nur deaktiviert und den Fehler behoben.

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

Benutzer-Avatar
marcvangend

Verwenden Sie das Insert-Modul? Sehen http://drupal.org/node/850946.

Wenn es um bestimmte Fehler wie diesen geht, sollten Sie meiner Meinung nach besser in der Problemwarteschlange suchen drupal.org als auf SO zu fragen.

Benutzer-Avatar
Wärme

Beispiel für eine gute Verwendung:

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

1256350cookie-checkarray_flip(): Kann nur STRING- und INTEGER-Werte umkehren! in DrupalDefaultEntityController->load()

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy