Rafff
Rafff

Reputation: 1518

After for-loop, returned array is wrong

I have something like that:

$n = 2;

$items = array();

$result = array(); // new array with random items

$random_items = array_rand( $items, $n );

for( $f=0; $f<=$n; $f++ ) {
  $result[] = $items[$random_items[$f]];
}

$items is sth like

Array ( [0] => file1.jpg [1] => file2.png [2] => file3.jpg ... and so on )

This is working OK... but if I set $n to 1 then the script is not working or working incorrectly!

If $n == 2 (or more) the result array have last element's value empty

Array ( [0] => 20141125-17826a4b34.png [1] => 20141125-27fe57561d.jpg [2] => )

If $n == 1 (exactly) the result array is like

Array ( [0] => [1] => ) 

The result array should be the same format as items array but only with $n random items.

Thanks in advance!

Working

if( $n > 1 ) {
  for( $f=0; $f<$n; $f++ ) {
    $result[] = $items[$random_items[$f]];
  }
}
elseif( $n == 1 ) {
  $result[0] = $items[$random_items];
}

Upvotes: 3

Views: 52

Answers (1)

thecodeparadox
thecodeparadox

Reputation: 87073

You should $f < $n instead of $f <= $n

for( $f=0; $f < $n; $f++ ) {
  $result[] = $items[$random_items[$f]];
}

Because, when you're using $f <= $n its running up to 0,1 (when, $n = 1) OR 0,1,2 (when $n = 2) and you're missing the last indexed element.

When picking only one entry, array_rand() returns the key for a random entry(not array).Otherwise, an array of keys for the random entries is returned.

So, This means, when you're using $n = 1, then $random_items is just a value(not array). eg.

for $n = 1, $random_items = 4;

but for $n >= 2, $random_items = [1, 6, 3, 6];

Upvotes: 4

Related Questions