68

I am sure that this is super easy and built-in function in PHP, but I have yet not seen it.

Here's what I am doing for the moment:

foreach($array as $key => $value) {
    echo $key; // Would output "subkey" in the example array
    print_r($value);
}

Could I do something like the following instead and thereby save myself from writing "$key => $value" in every foreach loop? (psuedocode)

foreach($array as $subarray) {
    echo arrayKey($subarray); // Will output the same as "echo $key" in the former example ("subkey"
    print_r($value);
}

Thanks!

The array:

Array
(
    [subKey] => Array
        (
            [value] => myvalue
        )

)
9
  • 15
    Whats wrong with foreach($array as $key => $value)? Or, asked the other way around, what's the point using foreach($array as $value) when you actually need $key somewhere down the road? Commented Jul 23, 2010 at 12:10
  • 2
    I just thought it could be a good idea to get the key in a quick way Commented Jul 23, 2010 at 12:12
  • 1
    But you do get it in a quick way with foreach($array as $key => $value)... :-) Or is the situation not that you are in a foreach loop? Commented Jul 23, 2010 at 12:14
  • I am in a foreach loop for sure, but what i've thought about was to not change the foreach statement, but just printing out the key. Commented Jul 23, 2010 at 12:21
  • 4
    Every function call you could make would be less efficient than simply changing to the appropriate foreach loop construct. Commented Jul 23, 2010 at 13:48

10 Answers 10

81

You can use key():

<?php
$array = array(
    "one" => 1,
    "two" => 2,
    "three" => 3,
    "four" => 4
);

while($element = current($array)) {
    echo key($array)."\n";
    next($array);
}
?>
Sign up to request clarification or add additional context in comments.

2 Comments

I want to add that you can use key() ANYWHERE but for this problem it make sense to use it in a while-loop. You can use key() in the instance of only wanting the first/current array element's key.
@Industrial foreach uses the key... if you want to use foreach, do this: foreach($array as $key => $value) { ... }
48

Use the array_search function.

Example from php.net

$array = array(0 => 'blue', 1 => 'red', 2 => 'green', 3 => 'red');

$key = array_search('green', $array); // $key = 2;
$key = array_search('red', $array);   // $key = 1;

Comments

40
$foo = array('a' => 'apple', 'b' => 'ball', 'c' => 'coke');

foreach($foo as $key => $item) {
  echo $item.' is begin with ('.$key.')';
}

Comments

17

$array = array(0 => 100, "color" => "red");
print_r(array_keys($array));

Comments

8

If it IS a foreach loop as you have described in the question, using $key => $value is fast and efficient.

Comments

3

If you want to be in a foreach loop, then foreach($array as $key => $value) is definitely the recommended approach. Take advantage of simple syntax when a language offers it.

Comments

1

Here is a generic solution that you can add to your Array library. All you need to do is supply the associated value and the target array!

PHP Manual: array_search() (similiar to .indexOf() in other languages)

public function getKey(string $value, array $target)
{
    $key = array_search($value, $target);

    if ($key === null) {
        throw new InvalidArgumentException("Invalid arguments provided. Check inputs. Must be a (1) a string and (2) an array.");
    }

    if ($key === false) {
        throw new DomainException("The search value does not exists in the target array.");
    }

    return $key;
}

Comments

0

Another way to use key($array) in a foreach loop is by using next($array) at the end of the loop, just make sure each iteration calls the next() function (in case you have complex branching inside the loop)

Comments

0

Try this

foreach(array_keys($array) as $nmkey)
    {
        echo $nmkey;
    }

Comments

0

This is what you need

$key = key($array);

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.