API page: https://api.drupal.org/api/drupal/modules%21taxonomy%21taxonomy.module/f...

Enter a descriptive title (above) relating to function taxonomy_vocabulary_machine_name_load, then describe the problem you have found:

Hi there,
I'm getting following Warning:
Warning: array_flip(): Can only flip STRING and INTEGER values! in DrupalDefaultEntityController->load() (line 178 of /home/www/maui2.mobilcom.de/htdocs/includes/entity.inc).

after calling taxonomy_vocabulary_machine_name_load()

The definition says:

function taxonomy_vocabulary_machine_name_load($name) {
  $vocabularies = taxonomy_vocabulary_load_multiple(NULL, array('machine_name' => $name));
  return reset($vocabularies);
}

taxonomy_vocabulary_load_multiple() is calling taxonomy_vocabulary_load_multiple with NULL as first argument.

function taxonomy_vocabulary_machine_name_load($name) {
  $vocabularies = taxonomy_vocabulary_load_multiple(NULL, array('machine_name' => $name));
  return reset($vocabularies);
}

and taxonomy_vocabulary_load_multiple() is expecting an array

function taxonomy_vocabulary_load_multiple($vids = array(), $conditions = array()) {
  return entity_load('taxonomy_vocabulary', $vids, $conditions);
}

I think it has to be sonmething like this:

function taxonomy_vocabulary_machine_name_load($name) {
  $vocabularies = taxonomy_vocabulary_load_multiple(array(), array('machine_name' => $name));
  return reset($vocabularies);
}

Please check if I'm wrong.

Greetings
Yusuf

Comments

David_Rothstein’s picture

Status: Active » Postponed (maintainer needs more info)

It's documented as taking either an array or FALSE, so it doesn't have to be an array but technically shouldn't be NULL either ... but in practice I don't think the difference matters. Here's the code from DrupalDefaultEntityController->load() (where $ids is the variable that this gets passed in as):

    $passed_ids = !empty($ids) ? array_flip($ids) : FALSE;
.....
    if ($ids === FALSE || $ids || $revision_id || ($conditions && !$passed_ids)) {

So as long as $ids is empty, then the array_flip() won't be called, and if $conditions is passed (which it is) the same code should run either way.

I also couldn't reproduce this bug, and given the above the array_flip() shouldn't even run in this case. Are you sure some other code path isn't triggering it? What are the steps to reproduce?

Yusuf.Fidan’s picture

Status: Postponed (maintainer needs more info) » Closed (cannot reproduce)

You're right, that was not the Problem. I'm trying to reproduce this with a debugger. The Value, that triggers the warning, ist an integer.
Greetings
Yusuf

seanr’s picture

Status: Closed (cannot reproduce) » Active

I'm getting this myself. Stepping through with a debugger, when taxonomy_vocabulary_load_multiple gets called with a null first parameter, the variable value comes through actually set to null rather than being set to an empty array as if no parameter had passed. That makes no sense to me - should passing it null act the same as passing it nothing and cause it to take the default of array()? This is in PHP 5.5.14.

David_Rothstein’s picture

Status: Active » Postponed (maintainer needs more info)

If you pass NULL as a function parameter, PHP uses NULL. (It only uses the default value if you don't pass the parameter at all.)

Question in #1 still applies - what are the steps to reproduce this?