这是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”值。
我意识到这可能不是最佳方式,我愿意接受建议。
提前致谢!!
特鲁法
答案 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_filter
和array_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
循环意味着你要循环,直到满足某些条件。
如果要对数组的每个元素执行操作,则应使用for
或foreach
循环,这样可以更清楚地表明迭代整个数组的意图:
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/>";
}