1

次の問題を解決するのを手伝ってくれる数学者がいるかどうか疑問に思っていました:

数字のシーケンス 012345678 を 036147258 に変えようとしています。

目的は、標準のソート機能が実行できない PHP 配列のインデックスをソートすることです。

これは私が持っている限りです:

for($i=0; $i<count($arrayWithNineIndices); $i++)
{
    $j=($i%3)*3;
    echo $j;
    if($i%3===0) echo " <----";
    echo "<br />";
}

036036036 を垂直方向に出力し、ゼロにマーカーを付けます。

理想的には、最初のマーカーに続く値に 1 を追加し、次に 2 番目のマーカーに続く値に 2 を追加するメカニズムが必要です。

(j=0; j<3; j++)主にループを使って午前中ずっと試してみましたが、役に立ちませんでした。

4

2 に答える 2

3
$result = array();

for ($i = 0; $i < 3; $i++) {
  for ($j = $i; isset($array[$j]); $j += 3) {
    $result[] = $array[$j];
  }
}

print_r($result);

動いているのを見る

于 2013-01-08T10:46:42.290 に答える
2

使用できます

$str = "012345678";
list($a, $b, $c) = array_chunk(str_split($str), 3);
foreach ( array_map(null, $a, $b, $c) as $part ) {
    echo implode($part);
}

出力

036147258

ライブデモを見る

ユニバーサル機能のために

echo autoShift("012345678", 3), PHP_EOL;
echo autoShift("0123456", 3), PHP_EOL;
echo autoShift("012345678", 2), PHP_EOL;
echo autoShift("0123", 2), PHP_EOL;

出力

036147258
0361425
024681357
0213

使用した機能

function autoShift($str, $shift = 3) {
    $args = array_chunk(str_split($str), $shift);
    array_unshift($args, null);
    return implode(array_map("implode", call_user_func_array("array_map", $args)));
}
于 2013-01-08T10:49:08.447 に答える