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たとえば3番目の名前ごとにループしてペアを返すスクリプトです。

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、2番目の例では4)は可変である必要があります。誰かがphpでこれを行う方法を知っていますか?

4

3 に答える 3

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 に答える
1

もう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 に答える
0

これらは(番号で)索引付けされていると思いますか?あなたの例では、[a、b、c]をリストするだけなので。次のようなものです(バグが1つずれている可能性がありますが、これがアイデアです):

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 に答える