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