PHP数组切片多个数组无功能

时间:2011-07-18 13:18:38

标签: php foreach slice

下面将$ 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个结果开始的。

有什么想法吗?

奇妙

3 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:1)

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

答案 2 :(得分:1)

您需要使用preserve_keys

  

preserve_keys:       请注意,array_slice()将重新排序并重置数组索引   默认情况下。您可以通过将preserve_keys设置为来更改此行为   TRUE。

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