在for循环期间插入计算值

时间:2017-11-28 15:33:34

标签: php arrays

我有一个看起来像这样的数组。

                    Array
                    (
                        [0] => Array
                            (
                                [0] => 1
                                [1] => 500
                                [2] => 800
                            )

                         [1] => Array
                            (
                                [0] => 1
                                [1] => 100
                                [2] => 200
                            )

                        [2] => Array
                            (
                                [0] => 1
                                [1] => 300
                                [2] => 400
                            )
                    )

我想使用foreach循环(不是函数)来做几件事。首先,我只想从子元素[2]中减去子元素[1]以生成子元素[3],然后将子元素3插回到输出数组中。见下文:

 $output=
                    Array
                    (
                        [0] => Array
                            (
                                [0] => 1
                                [1] => 500
                                [2] => 800
                                [3] => 300
                            )

                         [1] => Array
                            (
                                [0] => 1
                                [1] => 100
                                [2] => 200
                                [3] => 100
                            )

                        [2] => Array
                            (
                                [0] => 1
                                [1] => 400
                                [2] => 250
                                [3] => 150
                            )
                    )

为了做到这一点,我使用下面的每个循环来生成子元素3的值,它可以正常工作。我的问题是将值插回到正确位置的输出数组中。我已经评论了我失败的最后一次尝试。对不起,如果我错过了这里明显的。

                foreach($result as $sub)
                {   
                    //get values
                    $sub[3]=$sub[1]-$sub[2];
                    echo "<difference>".$sub[3]."<br>";//works ok

                    //insert values back into array
                    //$result[$sub[0]][3] = $sub[3];
                }

                print "<pre>";
                print_r($result);
                print "</pre>"; 
                die();  

2 个答案:

答案 0 :(得分:5)

问题:

$result[$sub[0]][3] = $sub[3]; //= $result[1][3] = $sub[3]

$sub[0]始终返回1(根据您的输入数组),因此它不是您正在寻找的内容。

解决方案:

$array as $key => $val循环中使用foreach格式 然后根据相关密钥访问子数组。

        foreach($result as $key => $sub)
        {   
            //get values
            $result[$key][3]=$sub[1]-$sub[2];

答案 1 :(得分:2)

你也可以使用array_map,它更优雅:

import pandas as pd
import pyodbc

# Connect to DB
server = 'server'
db = 'db'

conn = pyodbc.connect('DRIVER={SQL SERVER}; SERVER=' + server + '; DATABASE=' + db + '; TRUSTED_CONNECTION=yes')
cursor = conn.cursor()

table = 'table'
df = pd.read_sql('Select * From ' + table, conn)

Demo