如何创建每个第n项的数组?

时间:2012-08-18 15:17:04

标签: php

说我有下表:

name
----
A
B
C
D
E
F
G
H
I

我可以从MySQL中提取它并将其放在一个数组中:

$result = mysql_query("SELECT * FROM names ORDER BY name DESC");
while ($row = mysql_fetch_object($result)) {
  $names[] = $row->name
}

我现在正在寻找的是一个循环遍历$names并返回对的脚本,例如每个第三个名称:

array(
  [A] => [C],
  [B] => [D],
  [C] => [E],
  [D] => [F]
  [E] => [G]
  [F] => [H]
  [G] => [I]
)

或者,例如,每个第四个名字:

array(
  [A] => [D],
  [B] => [E],
  [C] => [F],
  [D] => [G]
  [E] => [H]
  [F] => [I]
)

中间的名称数量(第一个例子中的3个,第二个中的4个)应该是可变的。有谁知道如何在PHP中执行此操作?

3 个答案:

答案 0 :(得分:1)

您可以使用相当简单的for循环来完成此操作。

这是一个例子。您需要做的只是调整$seperation

<?php

$array = array('A','B','C','D','E','F','G','H','I');
$seperation = 3;
$assoc = array(); // stores result

for($i = 0; $i+$seperation < count($array); $i++) {
   $assoc[$array[$i]] = $array[$i + $seperation];
}

print_r($assoc);

Demo

答案 1 :(得分:1)

另一种选择是使用array_slice()array_combine()函数来创建您想要的键/值对。

function array_nth(array $array, $nth)
{
    $keys   = array_slice($array, 0, -($nth - 1));
    $values = array_slice($array, $nth - 1);
    return array_combine($keys, $values);
}

例如,

$names = range('A', 'I');
var_export(array_nth($names, 3));

给出

array (
  'A' => 'C',
  'B' => 'D',
  'C' => 'E',
  'D' => 'F',
  'E' => 'G',
  'F' => 'H',
  'G' => 'I',
)

答案 2 :(得分:0)

我假设这些已编入索引(按编号)?因为在你的例子中你只列出[a,b,c]。类似的东西(可能有一个错误,但这是想法):

function pairs($arr, $offset) {
    $rv = array();
    for ($i = 0; $i < (sizeof($arr) - $offset); $i++) {
        $rv[$arr[$i]] = $arr[$i + $offset];
    }
    return $rv;
}

认为这是非常自我解释的。 (sizeof($arr) - $offset)只是确保你没有$arr[$i + $offset];