|
Posted by Markus Ernst on 07/07/06 10:13
Markus Ernst schrieb:
> While looping through an array I extract all keys on the fly, as in this
> example:
>
> $data = array(
> array('name' => 'Helen', 'age' => '40'),
> array('name' => 'Mark', 'email' => 'mark@xyz.com', 'age' => '90'),
> );
> $keys = array();
> foreach ($data as $row) {
> foreach ($row as $key => $value) {
> // do other things here
> $keys[$key] = 1;
> }
> }
> $column_names = array_keys($keys);
>
> Now my question is about the line
> $keys[$key] = 1;
>
> This overwrites existing entries and thus creates a set of unique keys.
> This could also be done without overwriting:
> if (!isset($keys[$key])) $keys[$key] = 1;
>
> So I wonder which is more efficient - overwriting the array entry at
> every loop, or checking for it with the if statement.
Thank you all for your inputs! I finally tested the versions suggested
with my real data.
Version 1: $keys[$key] = $key;
Version 2: if (!isset($keys[$key])) $keys[$key] = $key;
Version 3: if (!in_array($key, $keys)) $keys[] = $key;
Though it was only a few lines, all versions in the same script, the
rankings differed from call to call; maybe I could say that version 1
tends to be fastest when total execution is fast, and version 3 tends to
win when total execution is slower.
Anyway the range was between 0.05 and 0.1 second, which was not really
the reason for my total execution time of 25-35 seconds! (Going on
measuring and optimizing other parts of the code, I reduced it to 3-5
seconds now!)
Navigation:
[Reply to this message]
|