【问题标题】:How do I collect the keys of all true values in an array?如何收集数组中所有真值的键?
【发布时间】:2011-04-27 15:10:48
【问题描述】:

这是 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 后也能继续搜索“true”值(而不仅仅是 3 个值的数组)。

我意识到这可能不是最好的方法,我愿意接受建议。

提前致谢!!

特鲁法

【问题讨论】:

    标签: php arrays function while-loop


    【解决方案1】:
    echo join("<br>", array_keys(array_filter($array)));
    

    array_filter 在您不提供回调方法时返回真值,array_keys 为您获取这些值的键,然后使用 join 准备输出

    【讨论】:

    • 并且解释一下:没有第二个参数的array_filter() 将删除其值评估为假的所有数组元素。 (例如,它也会删除 0-s)。
    • 工作就像一个魅力!非常感谢!
    【解决方案2】:

    您可以使用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】:

      你可以遍历整个数组:

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

      编辑:否?.. 嗯.. 另一种方法:

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

      【讨论】:

        【解决方案4】:

        只要当前数组元素的计算结果为true,构造while($bet = current($array)) 只会继续循环。一般来说,while 循环意味着您正在循环直到满足某些条件。

        如果您想对数组的每个元素执行操作,您应该使用forforeach 循环,这更清楚地表明您打算遍历整个数组:

        for($i = 0; $i < count($array); ++$i) {
        
        }
        
        foreach ($array as $key => $value) {
        
        }
        

        【讨论】:

          【解决方案5】:
          foreach ($array as $key => $value) { 
            if ($value == true) echo $key . "<br/>"; 
          } 
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2018-04-27
            • 2020-05-20
            • 1970-01-01
            • 2016-02-27
            • 1970-01-01
            • 2019-08-08
            • 2016-02-10
            • 1970-01-01
            相关资源
            最近更新 更多