说我有下表:
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中执行此操作?
答案 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);
答案 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];