32

I need to add values received from MySQL into an array (PHP). Here is what I've got:

$players = array();

while ($homePlayerRow = mysql_fetch_array($homePlayerResult)) {
    $players[] = $homePlayerRow['player_id'];
}

Is this the only way of doing it?

Also, is the following faster/better?

$players = array();

while ($homePlayerRow = mysql_fetch_array($homePlayerResult)) {
    array_push($players, $homePlayerRow['player_id']);
}
1
  • If you're only accessing the associative keys (player_id) then it's best to use mysql_fetch_assoc. You could also use mysql_fetch_row then $homePlayerRow[0], which is slightly faster. Commented Jul 8, 2009 at 17:11

2 Answers 2

29

It depends...

Documentation says,

"If you use array_push() to add one element to the array it's better to use $array[] = because in that way there is no overhead of calling a function."

Source: https://www.php.net/array_push

So it boils down to how much data you want to cram into that array at any particular moment.

Additionally, there's a fall-back. If the array-referenced doesn't exist when you call it using array_push, you'll bump an error. If you use $array[], the array will be created for you.

Sign up to request clarification or add additional context in comments.

3 Comments

In the end I decided to go with array[] = ... as the array might become very large at some stage
I believe it's faster to declare an array (with $arr = array()) before using $arr[] = X. It's also useful if your $arr[] statements are inside some control logic - you still have a variable at the end, an array with no elements.
@DisgruntledGoat why is it faster to declare an empty array? Do you have proof of this?
22

You can run it and see that array_push is slower in some cases:

http://snipplr.com/view/759/speed-test-arraypush-vs-array/

Run your code. Enjoy.

1 Comment

Just tested that link and it's correct, no viagra pointing now. :)

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.