|  | 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] |