【问题标题】:PHP array slice multiple array non functionalPHP数组切片多个数组不起作用
【发布时间】:2011-10-07 16:33:27
【问题描述】:

以下将 $scpar 分成两种类型,一种包含前 9,第二种包含从 10 到 18 的前逗号分隔值。

$scpar9 = array_slice($scpar,0,9);
      $scpar18 = array_slice($scpar,9,18);

然后我们使用 foreach 并使用 id 参数 $sid 从其他字段中获取相同的逗号分隔值。

foreach ($scpar9 as $sid => $scpar) {

然后从类似这样的其他字段中获取信息。

<b>'.$scpar.'</b> '.$sccomp[$sid].$scmen[$sid].

一切正常,问题在于后 9 个字段。

foreach ($scpar18 as $sid => $scpar) {
<b>'.$scpar.'</b> '.$sccomp[$sid].$scmen[$sid].

$scpar 字段是正确的,但包含 [$sid] 的字段是从第一个结果而不是第 9 个结果开始的。

有什么想法吗?

太棒了

【问题讨论】:

  • 你为什么要把这些分成 2 个数组? for 循环不是更好吗?
  • 你能解释一下它是如何工作的

标签: php foreach slice


【解决方案1】:

array_slice() 创建新数组,其中包含来自原始数组的,而不是键。在原始数组的上下文中使用 foreach 循环中的键是没有意义的,因为这些是来自新切片数组的键。

使用array_slice($scpar, 9, 18, true) 也可以复制键,而不仅仅是值:

$scpar18 = array_slice($scpar, 9, 18, true);
                                  #    ^^^ preserve keys

【讨论】:

    【解决方案2】:

    如果要保留键($sid),需要将array_slice的第四个参数设置为true,见http://php.net/manual/en/function.array-slice.php

    【讨论】:

      【解决方案3】:

      你需要使用preserve_keys

      preserve_keys : 请注意,array_slice() 将重新排序并重置数组索引 默认。您可以通过将 preserve_keys 设置为 真的。

         $scpar18 = array_slice($scpar,9,18, true);
      

      【讨论】:

        猜你喜欢
        • 2014-08-25
        • 2023-03-10
        • 2015-08-10
        • 2012-11-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-08-24
        相关资源
        最近更新 更多