henrijs henrijs - 1 month ago 13
PHP Question

target numeric keys only in array

I have an array with 2 kinds of keys, strings and integers. I want to do

foreach()
on this array and want to do it for numeric keys only. What is the most elegant way of doing it?

Answer

Here's a complicated method using array_filter() to return the numeric keys then iterate over them.

// $input_array is your original array with numeric and string keys
// array_filter() returns an array of the numeric keys
// Use an anonymous function if logic beyond a simple built-in filtering function is needed
$numerickeys = array_filter(array_keys($input_array), function($k) {return is_int($k);});

// But in this simple case where the filter function is a plain
// built-in function requiring one argument, it can be passed as a string:
// Really, this is all that's needed:
$numerickeys = array_filter(array_keys($input_array), 'is_int');

foreach ($numerickeys as $key) {
  // do something with $input_array[$key']
}

It's much easier though to just foreach over everything:

foreach ($input_array as $key => $val) {
  if (is_int($key)) {
    // do stuff
  }
}

Edit Misread original post and thought I saw "numeric" rather than "integer" keys. Updated to use is_int() rather than is_numeric().