Php 迭代多维数组

Php 迭代多维数组,php,arrays,codeigniter,multidimensional-array,foreach,Php,Arrays,Codeigniter,Multidimensional Array,Foreach,我在正确迭代多维数组时遇到问题,我正在尝试检索每个井的值..值 我的问题是,我似乎在一个数组中有一个数组,该数组中的每个键/对值都有一个数组,我不确定如何循环这些值,并将每个数组的值添加到数据库中 例如,如果我的页面上有一个表单,那么数组返回值就在下面,再下面就是两个表单返回的值,等等 Array ( [0] => Array ( [0] => Array ( [name] =>

我在正确迭代多维数组时遇到问题,我正在尝试检索每个井的值..值

我的问题是,我似乎在一个数组中有一个数组,该数组中的每个键/对值都有一个数组,我不确定如何循环这些值,并将每个数组的值添加到数据库中

例如,如果我的页面上有一个表单,那么数组返回值就在下面,再下面就是两个表单返回的值,等等

Array
(
    [0] => Array
        (
        [0] => Array
             (
                [name] => sl_propid
                [value] => 21
             )

        [1] => Array
            (
                [name] => sl_date
                [value] => 04/01/2014
            )

        [2] => Array
            (
                [name] => sl_ref
                [value] => Form1
            )

        [3] => Array
            (
                [name] => sl_nom_id
                [value] => 12
            )

        [4] => Array
            (
                [name] => sl_desc
                [value] => Form1
            )

        [5] => Array
            (
                [name] => sl_vat
                [value] => 60
            )

        [6] => Array
            (
                [name] => sl_net
                [value] => 999
            )

    )

)


我的问题是,如何迭代返回的数组(无论大小)并回调每个值

我尝试了嵌套foreach循环,这确实给了我结果,但只有一个键/值对让我相信我做了错误的循环,如果我静态访问它们,我可以检索值,这当然在正常情况下没有用

foreach ($result as $array) {
            print_r($array);

    }
上面的foreach返回上面的数组,添加另一个foreach将删除out“container”数组,但添加另一个foreach循环只返回一个键/值对,这种排序很有意义,因为第一个索引也是一个数组,希望我没有像我自己一样混淆其他所有人

谢谢你的阅读 谢谢你的帮助


使用下面的数组进行编辑,我得到了输出

    $result = $this->input->post();


    function test_print($item, $key)
    {
    echo "$key holds $item\n";


    //$this->SalesLedgerModel->addInvoiceToLedger($key, $key, $key, $key, $key, $key, $key);
    }

        array_walk_recursive($result, 'test_print');


    }

这几乎就是我想要的,但是我如何获取每个单独的值并将其添加到我的ModelFunction中(以实际将数据输入到DB中)

该函数有7个参数,但我不确定如何确保正确的信息进入正确的参数

$this->SalesLedgerModel->addInvoiceToLedger($propid, $date, $ref, $nomid, $desc, $vat, $net); 

我的控制器功能

function addInvoiceToLedger(){
         $this->load->model('SalesLedgerModel');
         // $propid = $this->input->post('propid');

     // $date = $this->input->post('date');
     // $ref = $this->input->post('ref');
     // $nomid = $this->input->post('id');
     // $desc = $this->input->post('desc');
     // $vat = $this->input->post('vat');
     // $net = $this->input->post('sl_net');



    $results = $this->input->post();
    //var_dump($results);   

        $size1 = sizeof($results)-1;

        for($i=0; $i<=$size1; $i++)
        {
            $size2 = sizeof($results[$i])-1;

            for($j=0; $j<=$size2; $j++)
            {
                $name = $results[$i][$j]['name'];
                $value = $results[$i][$j]['value'];

               echo $value . "\n" ; 
               $this->SalesLedgerModel->addInvoiceToLedger($value, $value, $value, $value, $value, $value, $value);

            }
        }

您可以编写一些递归代码逐步遍历数组,并在元素变为数组时再次调用自身,也可以编写一个非常简单的函数并通过该函数调用它,然后可以对值执行任何您喜欢的操作:

<?php
$sweet = array('a' => 'apple', 'b' => 'banana');
$fruits = array('sweet' => $sweet, 'sour' => 'lemon');

function test_print($item, $key)
{
    echo "$key holds $item\n";
}

array_walk_recursive($fruits, 'test_print');
?>

试试这个。会快得多。因为3个
foreach循环
比2个
for循环
的成本要高得多(
for循环
foreach循环
快)-

$size1=sizeof($results)-1;
如果($size1>0)
{
对于($i=0;$i 0)
{
对于($j=0;$jyour_model->insert($name,$value);
}
}
}   
}

我不确定如何使用我的模型函数中的值
$this->saleslegermodel->addInvoiceToLedger($propid,$date,$ref,$nomid,$desc,$vat,$net);
因为我不能将其设置为
$this->saleslegermodel->addInvoiceToLedger($item,$item,$item,$item,$item,$item,$item,$item,$item,$item)
因为变量会不断变化,或者我再次理解错误?或者我会使用键吗?我不确定你的意思抱歉。你应该根据需要将参数传递给函数?抱歉,我似乎让这里缺乏解释能力的人感到恼火,因为你可以看到我的AddInVoiceToLedger方法每次插入时都需要7个参数这是一个新的db条目。我如何将test_print函数中的值以正确的顺序输入AddInVoiceToLedger函数?例如,我不能说$propid=$key,因为每次键更改时,循环都会多次覆盖propid,这有什么意义吗?D:这太令人沮丧了,我甚至无法正确解释我所做的事情“我试着自己去做,但我自己却没有想到哈哈。这对嵌套在第二个数组中的数组不起作用。它会为未定义的偏移量[0]抛出错误:(
严重性:注意消息:未定义的偏移量:0 Filename:controllers/FinancialInput.php
第49行,
$size2=sizeof($results[$i])
我刚刚测试过。它工作正常。当数组为空时可能会出现这种情况。不,你是对的,它确实工作,也就是说,我可以打印出每个值,但我仍然不明白如何将其传递给我的模型函数:((这是有问题的)如果我尝试传递$value,那么它只会在每一列中输入第一个值,这与我在下面的答案D中遇到的问题相同:“查询”位对我没有用处,因为这是在我的控制器中,而不是在我的模型中,我只是尝试将正确的变量传递给正确的参数SCHECK edited one。我猜这就是你所说的。
<?php
$sweet = array('a' => 'apple', 'b' => 'banana');
$fruits = array('sweet' => $sweet, 'sour' => 'lemon');

function test_print($item, $key)
{
    echo "$key holds $item\n";
}

array_walk_recursive($fruits, 'test_print');
?>
a holds apple
b holds banana
sour holds lemon
foreach ($result as $array) {
  foreach($array as $arr){
     foreach($arr as $a){
       echo $a[value];
     }
  }

}
$size1 = sizeof($results)-1;

if($size1 > 0)
{
    for($i=0; $i<=$size1; $i++)
    {
        $size2 = sizeof($results[$i])-1;

        if($size2 > 0)
        {
            for($j=0; $j<=$size2; $j++)
            {
                $name = $results[$i][$j]['name'];
                $value = $results[$i][$j]['value'];

                $insert = $this->your_model->insert($name, $value);
            }
        }
    }   
}