【问题标题】:PHP: Perform operation on all array elements but the first and lastPHP:对除第一个和最后一个以外的所有数组元素执行操作
【发布时间】:2012-07-18 18:02:20
【问题描述】:

我知道我可以使用array_slice() 创建一个新数组,其中包含除第一个和最后一个元素之外的所有元素,对每个元素执行操作,然后将原始的第一个和最后一个值重新添加回去。不过,这似乎有点矫枉过正。有没有更简洁的方法来对所有内部数组元素而不是在末端执行操作(在这种情况下,只是将字符串附加到数组值中)?

【问题讨论】:

    标签: php arrays slice


    【解决方案1】:

    我可能会遗漏一些东西,但这不是解决问题吗?

    for ($i = 1; $i < count($arr) - 1; $i++) {
       // Do stuff to $arr[$i], like prefixing and suffixing
       $arr[$i] = 'prefix ' . $arr[$i] . ' suffix';
    }
    

    【讨论】:

    • 如果 OP 使用关联数组可能不会,但在这种情况下,顺序还是很奇怪。
    • 如果它是一个关联数组,并且已经排序,它们可以做同样的事情。只需在循环中获取array_keys($arr)[$i],然后使用该键对项目进行操作。
    • 这会一直将 $i 设置回 1,因此更改 $arr[i] 只会影响 $arr[1];
    • 它似乎只打印$arr[1],但打印它count($arr)-2 次。
    • 在进入for 循环之前执行print_r($breadcrumb) 以确保您认为数组中的内容确实如此。 for 循环代码是正确的,所以肯定有其他问题。
    【解决方案2】:

    这个呢:

    reset($array);
    $firstKey = key($array);
    end($array);
    $lastKey = key($array);
    foreach($array as $key => $value) {
        if ($key === $firstKey || $key === $lastKey) {
             continue;
        }
        do_your_stuff($key, $value);
     }
    

    【讨论】:

      【解决方案3】:

      有很多方法。一种是:

      for($i = 1; $i < count($arr)-1; $i++) {
          // process $arr[$i];
      }
      

      如果您的数组是关联的,并且已经以某种有意义的方式排序,您可以这样做:

      $keys = array_keys($arr);
      for($i = 1; $i < count($arr)-1; $i++) {
          // process $arr[$keys[$i]];
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-07-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-06
        相关资源
        最近更新 更多