【问题标题】:get the next key in array in php foreach loop在php foreach循环中获取数组中的下一个键
【发布时间】:2019-04-29 11:24:02
【问题描述】:

我有一个选择框,想要获取数组中下一个值的键以与选项一起使用,这是我的代码

<select>

<?php foreach ($make as $key => $make):?>
      <option value="<?php echo next($key);//not correct ?> - <?php echo $key; ?>"> <?php echo $make; ?></option>
<?php endforeach; 

这是数组

 Array
(
    [0] => Brand
    [1] => Alfa Romeo
    [123] => Alpina
    [142] => Aston Martin
    [152] => Audi
    [619] => Bentley
    [640] => BMW
    [1122] => Buick

)

【问题讨论】:

  • 键是数字且排列整齐
  • 只是出于兴趣,当“next”键不存在时,您希望在循环的最后一次迭代中发生什么?
  • 为什么value 属性想要包含一些你不能轻易使用来寻址到正确值的东西
  • 您的问题没有错,但这听起来确实像是重新考虑您的数组结构而不是尝试做您所描述的事情
  • 是的,它们是数字索引

标签: php arrays


【解决方案1】:

试试这个功能。它在数组中找到给定值的当前键,并从找到的键的位置,您可以使用 $increment 获取下一个/上一个键 例如:当$increment=1 时,它找到下一个键 当$increment=2 时,它会找到 2 个下一个键 当$increment=-1 时,它会找到 1 个之前的键,以此类推。

function sov_find_key($findvalue, $array, $increment) {
    reset($array);
    $key = array_search($findvalue, $array);
    
    if ($key === false || $key === 0){
        return false;
    }
    
    if ($increment === 0){
        return $key;
    }
    
    $isNegative = $increment < 0 ? true:false;
    $increment = abs($increment);
    
    while(key($array) !== $key) {
        next($array);
    }
    
    $x=0;
    while($x < $increment) {
        if( $isNegative ){
            prev($array);
        } else {
            next($array);
        }
        $x++;
    }
    
    return key($array);
} 

演示:https://3v4l.org/CSSmR

【讨论】:

    【解决方案2】:

    获取下一个元素的键的简单方法是使用数组下一个元素的array_search,例如

    <?php foreach ($makers as $key => $make):?>
      <option value="<?php echo array_search( next($makers), $makers );"> <?php echo $make; ?></option>
     <?php endforeach; 
    

    希望这会有所帮助。

    【讨论】:

      【解决方案3】:

      这将适用于关联数组以及数字索引:

      <?php foreach ($make as $key => $value):?>
          <?php next($make); ?>
          <option value="<?php echo key($make); ?> - <?php echo $key; ?>"> <?php echo $value; ?></option>
      <?php endforeach; ?>
      

      注意,使用与数组相同的变量名进行迭代会造成混淆,并且可能是个坏主意。所以我在这里做了foreach ($make as $key =&gt; $value) 而不是foreach ($make as $key =&gt; $make)

      上面的代码只是简单地推进数组上的指针,然后使用key() 获取您的选项值的键。由于最后一个数组元素上没有下一个键,因此该值将为空。

      【讨论】:

      • 不错的解决方案,我现在看到你的解决方案,我认为这种方式是最好的答案......所以我会投票给你......
      • 我不确定为什么 OP 不接受我的回答,但谢谢
      【解决方案4】:

      你可以通过很多解决方案来解决你的问题,但是如果你有一个 assoiatve 数组或无序数组或没有 numirc,你可以使用这个:

      <?php
      $array = ["a" => 1, "b" => 2, "c" => 3, 1 => "aa"];
      
      next($array);
      $key = key($array);
      echo $key;
      prev($array);
      $key = key($array);
      echo $key;
      

      否则,如果数组是有序且数字的,您可以使用$key + 1

      【讨论】:

        【解决方案5】:
        <select>
        
        <?php 
        foreach ($make as $key => $make):
        ?>
              <option value="<?php echo $key + 1; ?> - <?php echo $key; ?>"> 
        <?php echo $make; 
        ?>
        </option>
        <?php 
        endforeach; 
        

        只需将$key 加 1,如果键是按顺序排列且是数字的,您将获得下一个数组元素。

        【讨论】:

        • 你确定这段代码使用foreach ($make as $key =&gt; $make):运行吗?
        • 这不适用于关联数组。它还会在最后一次迭代中返回一个不存在的键,因为此时数组中不存在$key + 1。这可能是 OP 想要的,但它不是“在 php foreach 循环中获取数组中的下一个键
        • OP 说他的键是数字的,所以它回答了他的问题,但是谢谢,干得好。
        猜你喜欢
        • 2012-11-20
        • 2010-09-08
        • 2017-02-10
        • 2012-06-15
        • 2013-12-27
        • 2021-08-25
        • 1970-01-01
        • 2016-01-19
        相关资源
        最近更新 更多