迭代多维数组

时间:2014-04-05 15:13:59

标签: php arrays codeigniter multidimensional-array foreach

我无法正确迭代多维数组我试图检索每个井的值。值。

我的问题是我似乎在一个数组中有一个数组,它有一个数组用于每个键/对值,我不确定如何遍历这些数据并将值添加到每个数组的数据库中。

例如,如果我的页面上有一个表单,则数组返回低于,并且下面是两个表单返回的表单等

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
            )

    )

)

More than one form


我的问题是如何迭代返回的数组,无论它的大小和拉回每个值

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

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

    }

上面的foreach返回上面的数组,添加另一个foreach删除out" container"数组,但添加另一个foreach循环,只返回一个键/值对,这种排序是有道理的,因为第一个索引也是一个数组,希望我没有像其他人一样困惑其他人D:。

感谢您的阅读 任何帮助表示赞赏。


编辑使用下面的数组walk recursive我得到输出

    $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');


    }

Returns this

这几乎是我想要的,但我如何获取每个单独的值并将其添加到我的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);

            }
        }

我的模特功能

function addInvoiceToLedger($propid, $date, $ref, $nomid, $desc, $vat, $net){

        $data = array('sl_prop_id' => $propid, 'sl_date' => $date,
            'sl_ref' => $ref, 'sl_nominal_sub' => $nomid, 'sl_invoice_desc' => $desc, 'sl_vat' => $vat, 'sl_amount' => $net);

        $this->db->insert('salesledger', $data);
    }

3 个答案:

答案 0 :(得分:1)

你可以编写一些递归代码来逐步遍历数组,如果一个元素变成一个数组,你可以再次调用它自己,或者编写一个非常简单的函数并通过array walk recursive调用它,这样你就可以做任何事了喜欢价值:

<?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

答案 1 :(得分:0)

foreach ($result as $array) {
  foreach($array as $arr){
     foreach($arr as $a){
       echo $a[value];
     }
  }

}

答案 2 :(得分:0)

试试这个。它会快得多。由于3 foreach loops比2 for loops便宜得多(for loopsforeach loops更快) -

$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);
            }
        }
    }   
}