Php 将3列中的N个元素除以列

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个元素(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)
 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例:

  • N模3结果为0或1
  • vvN模3结果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
    :)工作