views:

45

answers:

5

This is slightly modified version of the code in the PHP docs:

http://php.net/manual/en/function.next.php

<?php

$array = array(
    -1 => true,
    0 => false,
    1 => true
);

while ($bet = current($array)) {
    if ($bet == true) {
        echo key($array) . '<br />';
    }
    next($array);
}
?>

This is as close as I could get to what I wanted.

This this echoes "-1", and I DO understand why.

What I want to know is how to modify this code so that it will continue searching for "true" values even after it encounters an false (and not just for an array of 3 values).

I realize this might not be the best way of doing it and I am open to suggestions.

Thanks in advance!!

Trufa

+1  A: 

You can loop through the entire array:

foreach ($bet as $key => $value) {
  if ($value == true) echo $key . "<br/>";
}

edit: no?.. hmm.. another method:

while (list($key,$value) = each($bet)) { 
  if ($value) echo $key . "<BR/>";
}
Fosco
I cant get it to work?
Trufa
+4  A: 
echo join("<br>", array_keys(array_filter($array)));

array_filter returns true values when you don't supply a callback method, array_keys gets you the keys for those values, then prep it for output using join

bemace
And to explain: array_filter() without second argument will remove all array elements whose value evalulates to false. (it will also remove 0-s for example).
Anti Veeranna
Worked like a charm!! Thanks a lot!
Trufa
@Anti Veeranna good clarification, thanks!!
Trufa
A: 

The construct while($bet = current($array)) will only continue looping so long as the current array element evaluates to true. In general while loops imply that you're looping until some condition is met.

If you want to perform an action on every element of an array, you should use a for or foreach loop, which more clearly state your intent to iterate over the entire array:

for($i = 0; $i < count($array); ++$i) {

}

foreach ($array as $key => $value) {

}
meagar
+1  A: 

You could use a combination of array_filter and array_keys:

$array = array(
  -1 => true,
  0 => false,
  1 => true
);

$keys = array_keys(array_filter($array));
echo join("<br />", $keys);

See this in action at http://www.ideone.com/AREmK.

array_keys returns an array containing they keys of the given array. array_filter lets you filter elements out of an array based on a callback function. If no callback is given, as the manual states:

If no callback is supplied, all entries of input equal to FALSE (see converting to boolean) will be removed.

Note that this will also filter out values that are falsy. If you want to only filter values that are explicitly false:

function filter_false($val)
{
  return $val !== false; // if $val is not false, it'll be kept
}
$keys = array_keys(array_filter($array, 'filter_false'));
Daniel Vandersluis
A: 
foreach ($array as $key => $value) { 
  if ($value == true) echo $key . "<br/>"; 
} 
adam