0

假设我有下表:

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]
)

或者,例如,每 4 个名称:

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

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

4

3 回答 3

1

另一种选择是使用array_slice()andarray_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',
)
于 2012-08-18T16:23:31.327 回答
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);

演示

于 2012-08-18T15:22:27.737 回答
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];

于 2012-08-18T15:23:00.977 回答