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 并在零上标记。

理想情况下,我需要一种机制,将一个添加到第一个标记之后的值,然后将两个添加到第二个标记之后的值。

我整个上午都在尝试,主要是(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 回答