如何收集数组中所有真值的键?

时间:2010-10-19 17:41:24

标签: php arrays function while-loop

这是PHP文档中代码的略微修改版本:

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);
}
?>

这与我想要的一样接近。

这回应“-1”,我明白为什么。

我想知道的是如何修改此代码,以便即使在遇到false(而不仅仅是3个数组的数组)之后它仍会继续搜索“true”值。

我意识到这可能不是最佳方式,我愿意接受建议。

提前致谢!!

特鲁法

5 个答案:

答案 0 :(得分:4)

echo join("<br>", array_keys(array_filter($array)));
当您不提供回调方法时,

array_filter会返回true值,array_keys会为您提供这些值的键,然后使用join

为其输出做准备

答案 1 :(得分:1)

您可以遍历整个数组:

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

编辑:没有?..嗯..另一种方法:

while (list($key,$value) = each($bet)) { 
  if ($value) echo $key . "<BR/>";
}

答案 2 :(得分:1)

您可以使用array_filterarray_keys的组合:

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

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

http://www.ideone.com/AREmK处查看此操作。

array_keys返回一个包含给定数组键的数组。 array_filter允许您根据回调函数过滤数组中的元素。如果没有给出回调,则手册说明:

  

如果没有提供回调,则将删除所有输入等于FALSE的条目(请参阅转换为布尔值)。

请注意,这也会过滤掉falsy的值。如果您只想过滤明确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'));

答案 3 :(得分:0)

构造while($bet = current($array))只会在当前数组元素求值为true时继续循环。一般来说,while循环意味着你要循环,直到满足某些条件。

如果要对数组的每个元素执行操作,则应使用forforeach循环,这样可以更清楚地表明迭代整个数组的意图:

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

}

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

}

答案 4 :(得分:-2)

foreach ($array as $key => $value) { 
  if ($value == true) echo $key . "<br/>"; 
} 
相关问题