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

我使用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);
    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作为一个数组,请参阅更新的代码。