我有以下数组:
array(a, a, a, b, b, c, c, c, c, d, d);
当我循环并回显它时,结果是:
a
a
a
b
b
c
c
c
c
d
d
我怎么想以这样的方式回应它:
a
b
c
d
a
b
c
d
a
c
c
这是网格中的数组,以更好地解释我想要实现的目标
Current
a a a b
b c c c
c d d
What im tryin to do
a b c d
a b c d
a c c
我该怎么做?
看到你的一些答案,很清楚我没解释得很清楚:/
我应该包含数组键的样子:
0a 1a 2a 3b
4b 5c 6c 7c
8c 9d 10d
0a 3b 6c 9d
1a 4b 7c 10d
2a 5c 8c
以下是我需要如何按键组织数组
0a
1a
2a
3b
4b
5c
6c
7c
8c
9d
10d
0a
3b
6c
9d
1a
4b
7c
10d
2a
5c
8c
答案 0 :(得分:1)
您可以使用类似的内容围绕特定步幅/宽度旋转数组:
function rotate_array(&$array, $width) {
$newarr = array();
for ($stride = 0; $stride < $width; $stride++) {
for ($i = $stride; $i < count($array); $i += $width) {
$newarr[] = $array[$i];
}
}
return $newarr;
}
此测试脚本:
$arr = array('a', 'a', 'a', 'b', 'b', 'c', 'c', 'c', 'c', 'd', 'd');
print_r($arr);
print_r(rotate_array($arr, 3));
将输出:
Array ( [0] => a [1] => a [2] => a [3] => b [4] => b [5] => c [6] => c [7] => c [8] => c [9] => d [10] => d ) Array ( [0] => a [1] => b [2] => c [3] => d [4] => a [5] => b [6] => c [7] => d [8] => a [9] => c [10] => c )
这看起来像你想要的输出。但是你的问题还不清楚如何你希望这个结果产生。在我看来,你想要显示从第一个项目开始的每三个项目,然后从第二个项目开始显示每三个项目,依此类推。如果这不是您想要完成的,那么请提供更好的样本数据,以便您的目标更加清晰。
答案 1 :(得分:1)
像这样遍历数组:
示例:
function noRepeatArray($array){
$lastChar = "";
for($j = 0;$j < count($array);$j++){
for($i = 0;$i < count($array);$i++){
if($array[$i] != $lastChar && strlen($array[$i]) > 0){
echo $array[$i] ."<br />";
$lastChar = $array[$i];
$array[$i] = '';
}
}
$lastChar = "";
}
}
这将循环遍历数组并且不允许重复字符,除非它是唯一剩下的字符(在您的示例中为“c”)。
答案 2 :(得分:1)
如果我正确理解您的规范,这应该有效:
<?php
function magicFunction($input) {
$output = array();
sort($input);
$startingCount = count($input);
for ($j=0; $j<count($input); $j++) {
$lastValue = NULL;
for ($i=0; $i<count($input); $i++) {
//var_dump($input[$i]);
if ($input[$i] !== NULL && $input[$i] !== $lastValue) {
$output[] = $input[$i];
$lastValue = $input[$i];
$input[$i] = NULL;
}
}
//echo '<hr />';
if (count($output) == $startingCount) {
break;
}
}
return $output;
}
$array = array('z','a','a','a','b','b','c','c','c','c','d','d','z');
$result = magicFunction($array);
echo '<pre>' . print_r($result, true) . '</pre>';
?>
输出:
Array
(
[0] => a
[1] => b
[2] => c
[3] => d
[4] => z
[5] => a
[6] => b
[7] => c
[8] => d
[9] => z
[10] => a
[11] => c
[12] => c
)
我将z
添加到输入数组(两次),以便我更容易测试。
您可以取消注释注释行,以帮助查看我的功能是如何工作的。
这可能是一种更有效的方法(或者至少对这种方法进行微小的性能调整),但我现在不打算太难看,因为我可能误解了你的问题。无论如何,除非您的输入数组非常庞大,否则无关紧要。
答案 3 :(得分:1)
另一种方式(假设数组已经排序,如在您的示例中):
$vals = array_count_values($array);
while (!empty($vals)) {
foreach ($vals as $key => & $ct) {
echo $key . "\n";
if (!--$ct) {
unset($vals[$key]);
}
}
}