我已经尝试了所有我知道的东西,并且我完全没有解析这个多维数组,因此我可以从内部和外部数组中获取密钥和值以保存到数据库。
array:10 [▼
"_token" => "aHgDik0zuDxxBqYgbi0ZTkaPyG3CVwk5WO7LtU6u"
"contractor_invoice_no" => ""
"date" => "26-11-2015"
"contractor_reference" => "sdfsdf"
"workorder_reference" => "151 alandale"
"square_installed" => "455"
"square_invoice" => "677"
"other_work_" => array:3 [▶]
"other_invoice_" => array:3 [▶]
"comments" => "comments"
]
我尝试过嵌套的foreach循环,当回显出外部数组的值时,我总是得到一个数组到字符串转换错误。我不会向你展示我所做的每一次尝试,但下面的这个尝试给了我所有的外部数组,但后来在echo语句中显示了一个错误,它告诉我它在击中内部数组时失败了。
foreach($invoice as $key=> $value)
{
echo " Data $value Key $key"; // Array to String conversion error here !
if (is_array($value) || is_object($value))
{
foreach ($value as $sample=>$data)
{
echo "Key $sample Data $data";
}
}
}
如何使这项工作?
非常感谢!
答案 0 :(得分:1)
您有此消息,因为某些值为arrays
,例如'其他工作'。
可以迭代:
$iterator = new RecursiveIteratorIterator(new RecursiveArrayIterator($arr))
Iterating over a complex Associative Array in PHP
获取键值对并将其推送到结果数组中,如:
function getData($arr)
{
$res = array();
$iterator = new RecursiveIteratorIterator(new RecursiveArrayIterator($arr));
foreach($iterator as $key=>$value) {
$pair = array($key, $value);
array_push($res, $pair);
}
return $res;
}
$res = getData($arr); // All key-value-pairs are stored in $res
// Key: $res[n][0]
// Value: $res[n][1]
完整示例:
$arr = [
"_token" => "aHgDik0zuDxxBqYgbi0ZTkaPyG3CVwk5WO7LtU6u",
"contractor_invoice_no" => "",
"date" => "26-11-2015",
"contractor_reference" => "sdfsdf",
"workorder_reference" => "151 alandale",
"square_installed" => "455",
"square_invoice" => "677",
"other_work_" => array(1, array('a', 'b', array('one' => 'path'))),
"other_invoice_" => array(1, 2, 3),
"comments" => "comments"
];
function getData($arr)
{
$res = array();
$iterator = new RecursiveIteratorIterator(new RecursiveArrayIterator($arr));
foreach($iterator as $key=>$value) {
$pair = array($key, $value);
array_push($res, $pair);
}
return $res;
}
$res = getData($arr); // All key-value-pairs are stored in $res
// Key: $res[n][0]
// Value: $res[n][1]
// Output the pairs
$max = count($res);
for($i = 0; $i < $max; $i++)
{
echo "key: " . $res[$i][0] . ", value: " . $res[$i][1] . PHP_EOL;
}
可以通过$res
访问所有内容。 $res[n][0]
是关键,$res[n][1]
是对应的值。如果您有多维数组但不知道 级别,此解决方案就是一个解决方案。
如果你知道数组是一个简单的数组,比如
array('one', 'two', 'three');
您可以使用implode方法将其变为字符串,例如
$res = array();
foreach ($arr as $key => $value) {
if(is_array($value))
{
$value = implode(" ", $value);
}
$pair = array($key, $value);
array_push($res, $pair);
}
我希望这有帮助!