PHP在多维数组中循环
我使用jquery创建了这个数组,并将其传递给php脚本。使用PHP在多维数组中循环,php,Php,我使用jquery创建了这个数组,并将其传递给php脚本。使用json\u decode解码的是json。我可以循环浏览其中的大部分内容,但是items位附近有一部分让我卡住了。你能帮忙吗 这是使用print_r()输出的 PHP $data = json_decode($_POST['data'],true); echo '<pre>'; foreach ($data as $key=>$a) { //print_r($key);print_r($a); f
json\u decode
解码的是json
。我可以循环浏览其中的大部分内容,但是items
位附近有一部分让我卡住了。你能帮忙吗
这是使用print_r()
输出的
PHP
$data = json_decode($_POST['data'],true);
echo '<pre>';
foreach ($data as $key=>$a) {
//print_r($key);print_r($a);
foreach ($a as $key=>$b) {
//print_r($key);print_r($b);
foreach ($b as $key=>$c) {
print_r($key);print_r($c);
foreach ($c as $key=>$d) {
//print_r($d);
}
}
}
}
echo '</pre>';
也许是这样的:
$data = [
[
'Invoice' => [
'header' => [
'date' => '20-Jan-2020',
'buyer' => 'Buyer 1',
'order' => '006896',
],
'items' => [
[
'name' => 'Name 1',
'quantity' => 'Quantity 1',
'rate' => 199.99
],
[
'name' => 'Name 2',
'quantity' => 'Quantity 2',
'rate' => 99.99
],
],
],
],
[
'Invoice' => [
'header' => [
'date' => '22-Jan-2020',
'buyer' => 'Buyer 2',
'order' => '006891',
],
'items' => [
[
'name' => 'Name 3',
'quantity' => 'Quantity 3',
'rate' => 155.55
],
[
'name' => 'Name 5',
'quantity' => 'Quantity 5',
'rate' => 222.22
],
],
],
]
];
@诺曼:
可以在一个循环中完成所有操作而不指定键名吗 假设输入是
foreach($data as $v)
{
$invoice = array_shift($v);
$header = array_shift($invoice);
print_item($header);
$body = array_shift($invoice);
array_map('print_item', $body);
}
function print_item($item)
{
array_map('print_chunk',array_keys($item),$item);
echo "\n";
}
function print_chunk($key,$value)
{
echo "$key: $value\n";
}
然后使用下面的单循环
date: 20-Jan-2020
buyer: Buyer 1
order: 006896
name: Name 1
quantity: Quantity 1
rate: 199.99
name: Name 2
quantity: Quantity 2
rate: 99.99
date: 22-Jan-2020
buyer: Buyer 2
order: 006891
name: Name 3
quantity: Quantity 3
rate: 155.55
name: Name 5
quantity: Quantity 5
rate: 222.22
您将获得以下输出
foreach($data[0] as $key => $value) {
// Loop through invoice
foreach($value as $key => $value) {
// Loop through header and iterms
foreach($value as $key => $value) {
// Check if the value has an array
if (is_array($value)) {
echo "<br>";
foreach($value as $key => $value) {
print_r($key);
echo ": ";
print_r($value);
echo "<br>";
}
} else {
print_r($key);
echo ": ";
print_r($value);
echo "<br>";
}
}
}
}
也许是这样的:
$data = [
[
'Invoice' => [
'header' => [
'date' => '20-Jan-2020',
'buyer' => 'Buyer 1',
'order' => '006896',
],
'items' => [
[
'name' => 'Name 1',
'quantity' => 'Quantity 1',
'rate' => 199.99
],
[
'name' => 'Name 2',
'quantity' => 'Quantity 2',
'rate' => 99.99
],
],
],
],
[
'Invoice' => [
'header' => [
'date' => '22-Jan-2020',
'buyer' => 'Buyer 2',
'order' => '006891',
],
'items' => [
[
'name' => 'Name 3',
'quantity' => 'Quantity 3',
'rate' => 155.55
],
[
'name' => 'Name 5',
'quantity' => 'Quantity 5',
'rate' => 222.22
],
],
],
]
];
@诺曼:
可以在一个循环中完成所有操作而不指定键名吗 假设输入是
foreach($data as $v)
{
$invoice = array_shift($v);
$header = array_shift($invoice);
print_item($header);
$body = array_shift($invoice);
array_map('print_item', $body);
}
function print_item($item)
{
array_map('print_chunk',array_keys($item),$item);
echo "\n";
}
function print_chunk($key,$value)
{
echo "$key: $value\n";
}
然后使用下面的单循环
date: 20-Jan-2020
buyer: Buyer 1
order: 006896
name: Name 1
quantity: Quantity 1
rate: 199.99
name: Name 2
quantity: Quantity 2
rate: 99.99
date: 22-Jan-2020
buyer: Buyer 2
order: 006891
name: Name 3
quantity: Quantity 3
rate: 155.55
name: Name 5
quantity: Quantity 5
rate: 222.22
您将获得以下输出
foreach($data[0] as $key => $value) {
// Loop through invoice
foreach($value as $key => $value) {
// Loop through header and iterms
foreach($value as $key => $value) {
// Check if the value has an array
if (is_array($value)) {
echo "<br>";
foreach($value as $key => $value) {
print_r($key);
echo ": ";
print_r($value);
echo "<br>";
}
} else {
print_r($key);
echo ": ";
print_r($value);
echo "<br>";
}
}
}
}
这是在不指定密钥名称的情况下执行的方式:
foreach($data as $key => $value) {
// New Loop
foreach($value as $key => $value) {
// Loop through invoice
foreach($value as $key => $value) {
// Loop through header and iterms
foreach($value as $key => $value) {
// Check if the value has an array
if (is_array($value)) {
echo "<br>";
foreach($value as $key => $value) {
print_r($key);
echo ": ";
print_r($value);
echo "<br>";
}
} else {
print_r($key);
echo ": ";
print_r($value);
echo "<br>";
}
}
}
}
}
foreach($data[0]作为$key=>$value){
//循环检查发票
foreach($key的值=>$value){
//循环通过标头和iterms
foreach($key的值=>$value){
//检查该值是否具有数组
if(是_数组($value)){
回声“
”;
foreach($key的值=>$value){
打印(钥匙);
回声“;”;
打印(价值);
回声“
”;
}
}否则{
打印(钥匙);
回声“;”;
打印(价值);
回声“
”;
}
}
}
}
编辑:
foreach($key=>$value形式的数据){
//新回路
foreach($key的值=>$value){
//循环检查发票
foreach($key的值=>$value){
//循环通过标头和iterms
foreach($key的值=>$value){
//检查该值是否具有数组
if(是_数组($value)){
回声“
”;
foreach($key的值=>$value){
打印(钥匙);
回声“;”;
打印(价值);
回声“
”;
}
}否则{
打印(钥匙);
回声“;”;
打印(价值);
回声“
”;
}
}
}
}
}
这是在不指定密钥名称的情况下执行的方法:
foreach($data as $key => $value) {
// New Loop
foreach($value as $key => $value) {
// Loop through invoice
foreach($value as $key => $value) {
// Loop through header and iterms
foreach($value as $key => $value) {
// Check if the value has an array
if (is_array($value)) {
echo "<br>";
foreach($value as $key => $value) {
print_r($key);
echo ": ";
print_r($value);
echo "<br>";
}
} else {
print_r($key);
echo ": ";
print_r($value);
echo "<br>";
}
}
}
}
}
foreach($data[0]作为$key=>$value){
//循环检查发票
foreach($key的值=>$value){
//循环通过标头和iterms
foreach($key的值=>$value){
//检查该值是否具有数组
if(是_数组($value)){
回声“
”;
foreach($key的值=>$value){
打印(钥匙);
回声“;”;
打印(价值);
回声“
”;
}
}否则{
打印(钥匙);
回声“;”;
打印(价值);
回声“
”;
}
}
}
}
编辑:
foreach($key=>$value形式的数据){
//新回路
foreach($key的值=>$value){
//循环检查发票
foreach($key的值=>$value){
//循环通过标头和iterms
foreach($key的值=>$value){
//检查该值是否具有数组
if(是_数组($value)){
回声“
”;
foreach($key的值=>$value){
打印(钥匙);
回声“;”;
打印(价值);
回声“
”;
}
}否则{
打印(钥匙);
回声“;”;
打印(价值);
回声“
”;
}
}
}
}
}
这有助于:
演示:这有助于:
演示:是否可以在一个循环中完成而不指定键名?是-如果您愿意使用
array\u map
是否可以在一个循环中完成而不指定键名?是-如果您愿意使用array\u map
,此操作非常有效,但仅显示单个发票的数据。我猜这是因为您使用了foreach($data[0]。我尝试将其更改为$data
,但这仍然无法解决问题。我需要在其中显示所有发票的数据…然后您只需添加另一个循环,因为$data作为一个数组,请参阅更新的代码。这非常有效,但仅显示单个发票的数据。我想这是因为您使用了foreach($data[0]
。我尝试将其更改为$data
,但仍然无法解决问题。我需要在其中显示所有发票的数据…然后您只需添加另一个循环,因为$data作为一个数组,请参阅更新的代码。