Php 将3列中的N个元素除以列
我需要将N个元素(1..N)写入3列,并需要得到3个元素值,每个列中最后一个 我需要得到这个:Php 将3列中的N个元素除以列,php,arrays,Php,Arrays,我需要将N个元素(1..N)写入3列,并需要得到3个元素值,每个列中最后一个 我需要得到这个: N ... array I need to get -------------------- 1 ... array(1) // or array(1, 1, 1) 2 ... array(1, 2) // or array(1, 2, 2) 3 ... array(1, 2, 3) 4 ... array(2, 3, 4) 5 ... array(2, 4, 5)
N ... array I need to get
--------------------
1 ... array(1) // or array(1, 1, 1)
2 ... array(1, 2) // or array(1, 2, 2)
3 ... array(1, 2, 3)
4 ... array(2, 3, 4)
5 ... array(2, 4, 5)
6 ... array(2, 4, 6)
7 ... array(3, 5, 7)
8 ... array(3, 6, 8)
9 ... array(3, 6, 9)
10 ... array(4, 7, 10)
11 ... array(4, 8, 11)
12 ... array(4, 8, 12)
13 ... array(5, 9, 13)
...etc
f、 例如,如果N=10
,我需要得到结果数组(4,7,10)
,输出表如下:
1 5 8
2 6 9
3 7 10
4
1 5 9
2 6 10
3 7
4 8
Array
(
[0] => Array
(
[0] => 1
[1] => 5
[2] => 8
)
[1] => Array
(
[0] => 2
[1] => 6
[2] => 9
)
[2] => Array
(
[0] => 3
[1] => 7
[2] => 10
)
[3] => Array
(
[0] => 4
[1] =>
[2] =>
)
)
$cells = array();
foreach ($num_rows as $col => $num) {
$cells[] = get_cell_number($num_rows, $n, $num - 1, $col);
}
print_r($cells);
$max_rows = count($final_array[0]); // first sub-array will always be largest
for($i = 0; $i < $max_rows; $i++) {
for($j = 0; $j < $column_count; $j++) {
if(isset($final_array[$i][$j])) {
$row_string = $final_array[$i][$j] . ' | ';
}
}
$row_string = rtrim('| ', $row_string) . '<br>';
echo $row_string;
}
PS:
不是这样的:
1 5 8
2 6 9
3 7 10
4
1 5 9
2 6 10
3 7
4 8
Array
(
[0] => Array
(
[0] => 1
[1] => 5
[2] => 8
)
[1] => Array
(
[0] => 2
[1] => 6
[2] => 9
)
[2] => Array
(
[0] => 3
[1] => 7
[2] => 10
)
[3] => Array
(
[0] => 4
[1] =>
[2] =>
)
)
$cells = array();
foreach ($num_rows as $col => $num) {
$cells[] = get_cell_number($num_rows, $n, $num - 1, $col);
}
print_r($cells);
$max_rows = count($final_array[0]); // first sub-array will always be largest
for($i = 0; $i < $max_rows; $i++) {
for($j = 0; $j < $column_count; $j++) {
if(isset($final_array[$i][$j])) {
$row_string = $final_array[$i][$j] . ' | ';
}
}
$row_string = rtrim('| ', $row_string) . '<br>';
echo $row_string;
}
我写了这段代码,但它在N=10
方面有问题。有人能帮我吗,或者在那样大的情况下发现问题吗?还是简单一点?非常非常感谢
$count_all = 10; // this is N = 10
$count = floor(($count_all - 1) / 3) + 1;
$i = 0;
$j = 1;
echo '<div style="float: left;">';
for ($k = 1; $k <= 10; $k++) {
echo '<div style="width: 230px;">';
echo $k;
echo '</div>';
if (
(++$i == $count) or
(($i == 1) and ($count_all - $i + 1 == $count)) or
(($i > 1) and ($count_all - $i == $count)) or
($i + ($j - 1) * $count == $count_all)
) {
echo '</div>';
echo '<div style="float: left;">';
$i = 0;
$j++;
}
}
echo '</div>';
$count\u all=10;//这是N=10
$count=楼层($count_all-1)/3)+1;
$i=0;
$j=1;
回声';
对于($k=1;$k 1)和($count_all-$i==$count))或
($i+($j-1)*$count==$count\u all)
) {
回声';
回声';
$i=0;
$j++;
}
}
回声';
它已经准备好,可以用javascript编写逻辑,您可以在JSFIDLE上查看代码
唯一不同的是,我使用行而不是列,因此在行的末尾,您将看到您的数字以及弹出的警报框中的数字
逻辑很简单,你想显示所有的数字,比如说N=25,这是一个循环,显示从1到25的数字,因为你需要两个变量,在其中断开一个新列(我的例子是一个新行)
2例:
var count_all = 11;
var m = count_all%3;
var r = parseInt(count_all/3);
if ((m == 1) || (m == 0)) {
var first_num = r+m;
var second_num = first_num + r;
}
if (m == 2) {
var first_num = r+1;
var second_num = first_num + r + 1;
}
// let's see the array in an alert box
alert(first_num.toString() + " " + second_num.toString() + " " + count_all.toString());
//now comes visualization
var g = document.createElement('div');
for (var i=1;i<=count_all; i++) {
var t=document.createTextNode(i + " ");
g.appendChild(t);
$('#divs').append(g);
if ((i==first_num) || (i==second_num)) {
//new column (in this case row)
var g = document.createElement('div');
$('#divs').append(g);
}
}
var count\u all=11;
var m=全部%3的计数;
var r=parseInt(全部计数/3);
如果((m==1)| |(m==0)){
var first_num=r+m;
var second_num=first_num+r;
}
如果(m==2){
var first_num=r+1;
var second_num=first_num+r+1;
}
//让我们在警报框中查看阵列
警报(第一个\u num.toString()+“”+第二个\u num.toString()+“”+计数\u all.toString());
//现在是可视化
var g=document.createElement('div');
对于(var i=1;i基于您想要的输出,您可以这样做(相应地应用html):
如果只需要每列的最后一个值,可以执行以下操作:
1 5 8
2 6 9
3 7 10
4
1 5 9
2 6 10
3 7
4 8
Array
(
[0] => Array
(
[0] => 1
[1] => 5
[2] => 8
)
[1] => Array
(
[0] => 2
[1] => 6
[2] => 9
)
[2] => Array
(
[0] => 3
[1] => 7
[2] => 10
)
[3] => Array
(
[0] => 4
[1] =>
[2] =>
)
)
$cells = array();
foreach ($num_rows as $col => $num) {
$cells[] = get_cell_number($num_rows, $n, $num - 1, $col);
}
print_r($cells);
$max_rows = count($final_array[0]); // first sub-array will always be largest
for($i = 0; $i < $max_rows; $i++) {
for($j = 0; $j < $column_count; $j++) {
if(isset($final_array[$i][$j])) {
$row_string = $final_array[$i][$j] . ' | ';
}
}
$row_string = rtrim('| ', $row_string) . '<br>';
echo $row_string;
}
哪些产出:
Array
(
[0] => 4
[1] => 7
[2] => 10
)
您还可以更改$n
和$cols
的值。因此,这里的基本挑战是将单个数组拆分为多个数组
$column_count = 3; // define number of columns
$start_array = array(1,2,3,4,5,6,7,8,9,10); // your input array
$start_array_size = count($start_array);
$final_array = array(); // array to put stuff into
array_walk($start_array, function($value, $key) use ($column_count, $start_array_size, $final_array) {
if(!is_int($key)) {
throw new Exception('Non-numeric key value passed');
}
$index = floor(($key*$column_count)/$start_array_size);
if ($index < 0) $index = 0;
$final_array[$index] = $value;
});
var_dump($final_array);
因此,在输出表格时,您可以执行以下简单操作:
1 5 8
2 6 9
3 7 10
4
1 5 9
2 6 10
3 7
4 8
Array
(
[0] => Array
(
[0] => 1
[1] => 5
[2] => 8
)
[1] => Array
(
[0] => 2
[1] => 6
[2] => 9
)
[2] => Array
(
[0] => 3
[1] => 7
[2] => 10
)
[3] => Array
(
[0] => 4
[1] =>
[2] =>
)
)
$cells = array();
foreach ($num_rows as $col => $num) {
$cells[] = get_cell_number($num_rows, $n, $num - 1, $col);
}
print_r($cells);
$max_rows = count($final_array[0]); // first sub-array will always be largest
for($i = 0; $i < $max_rows; $i++) {
for($j = 0; $j < $column_count; $j++) {
if(isset($final_array[$i][$j])) {
$row_string = $final_array[$i][$j] . ' | ';
}
}
$row_string = rtrim('| ', $row_string) . '<br>';
echo $row_string;
}
$max_rows=count($final_array[0]);//第一个子数组总是最大的
对于($i=0;$i<$max_行;$i++){
对于($j=0;$j<$column\u count;$j++){
if(isset($final_数组[$i][$j])){
$row_string=$final_数组[$i][$j]。|';
}
}
$row_string=rtrim(“|”,$row_string)。”
;
echo$row_字符串;
}
显然,您可以使用所需的HTML替换管道分隔符和换行符。我完全不了解您的数组以及第一部分与所需输出的关系。对此我感到抱歉,我知道,可能更难理解我需要的内容。包含3个元素的数组是每列中的最后3个元素。在您的输出,最后一列是8,9,10
,但在你的数组中没有出现。我想他的意思是:8…数组(3,6,>8)9…数组(3,6,>9)10…数组(4,7,>10)。只有最后的数字才应该被查找。如果你盯着这个示例代码看的时间足够长,你开始看到3D帆船:-)只有当(n==10)或(n%10==0)?我也可以用php编写,但我认为用任何其他语言重写代码都是很清楚的。谢谢你的解决方案,但是:1。它需要有全局($final_数组)代码>内部数组\u walk
功能;2.它只适用于N=10
,不适用于其他数字。对我来说,只需要得到简单的数组array(4,7,10)就足够了代码>,我将按我的方式输出。@Legionar您关于逻辑不正确的说法是正确的。事实上,我已经把它调整到了现在应该工作的地方。您不需要声明$final_array
和通过use
传递给函数的其他变量,因为use
的目的是让您能够使用调用范围中声明的变量。至于输出,我只是想一行一行地输出结果表,因此使用表示每列的子数组可以方便地访问数据。非常感谢:)我想要更简单的解决方案,不使用任何来处理,但它的工作方式很有魅力,所以不管怎样:)是的,我只需要每个列的最后一个值。为每个N
:)工作