【问题标题】:How to echo data from a Multi-Dimensional Array in PHP?如何在 PHP 中回显多维数组中的数据?
【发布时间】:2022-01-12 23:05:20
【问题描述】:

我需要像这样将数据回显/返回到页面:

目录: 251-2010
规格: 20g
长度: 10cm
笔尖尺寸: 10 毫米

这是一个名为 $vararray 的数组。它包含几个不同的产品变化数据数组:

array(3) { 
    [0]=> array(1) { 
        ["251-2010"]=> array(1) { 
            ["Gauge"]=> string(3) "20g" 
        } 
    } 
    [1]=> array(1) { 
        ["251-2010"]=> array(1) { 
            ["Length"]=> string(4) "10cm" 
        } 
    } 
    [2]=> array(1) { 
        ["251-2010"]=> array(1) { 
            ["Tip Size"]=> string(4) "10mm" 
        } 
    } 
}
array(3) { 
    [0]=> array(1) { 
        ["600-VR1620"]=> array(1) { 
            ["Chart Type"]=> string(14) "Shirt" 
        } 
    } 
    [1]=> array(1) { 
        ["600-VR1152"]=> array(1) { 
            ["Chart Type"]=> string(13) "Trousers" 
        } 
    } 
    [2]=> array(1) { 
        ["600-VR16211"]=> array(1) { 
            ["Chart Type"]=> string(13) "Socks" 
        } 
    } 
}

我需要这样的东西:

$vargroup = array();

foreach ($vararray as $vitems) {

    $varmeta = array_values($vararray);

    foreach ($varmeta as $metain => $vardetails) {
  
        vargroup[$metain]['catalog'] = $vardetails['Catalog'];
        vargroup[$metain]['gauge'] = $vardetails['Gauge'];
        vargroup[$metain]['length'] = $vardetails['Length'];
        vargroup[$metain]['tipsize'] = $vardetails['Tip Size'];

    }
    $vars_profile = '';
    foreach ($vargroup as $vgrp) {
        $vars_profile .= $vgrp[catalog] . '<br>' . $vgrp[gauge] . '<br>' . $vgrp[length] . '<br>' . $vgrp[tipsize];
    }
}
return $vars_profile;

我很难做到正确。这是我需要的外观:

目录: 251-2010
规格: 20g
长度: 10cm
笔尖尺寸: 10 毫米

目录: 600-VR1620
图表类型: 衬衫

目录: strong> 600-VR1152
图表类型:裤子

目录: 600-VR16211
图表类型:袜子

【问题讨论】:

  • 你不应该在循环内有return。这将在第一次迭代后停止循环。
  • $vars_profile = ''; 开头的所有内容都不应该在第一个循环中。

标签: php multidimensional-array


【解决方案1】:

您无法从同一个 $vardetails 元素中获取所有 CatalogGaugeLengthTip Size,它们位于数组的不同元素中。您需要深入每个元素以获取其键和值。

您可以在处理原始数组的循环中创建$vars_profile,您不需要$vargroup

要仅显示一次类别,请使用变量来保存最后一个值。仅在该字段发生变化时输出类别行。

$vars_profile = '';

$last_metain = null;
foreach ($vararray as $vitem) {
    foreach ($vitem as $metain => $vardetails) {
        if ($metain != $last_metain) {
            $vars_profile .= "<p>\nCatalog: $metain<br>\n";
            $last_metain = $metain;
        }
        foreach ($vardetails as $key => $value) {
            $vars_profile .= "$key: $value<br>\n";
        }
    }
}

return $vars_profile;

【讨论】:

  • @Barmer 我认为这更接近一步......谢谢......但它不会产生我在原始问题中指定的结果(请再次查看)。首先, $vitems 只看到每个数组的最后一项。我尝试将 $vararray 用作 $vkeys => $vitems ,但 var_dump 中的 $vitems 也只产生了最后一项。除了小的语法问题,这段代码 ($vars_profile = "$key: $value";) 并没有让我能够为每个 $key 和每个 $value 分配一个变量,这是需要的,我想想展示我需要的东西。
  • 对不起,我的意思是写.=$vars_profile 的所有作业
  • 我更新了结果的显示,我需要包含来自所有数组的所有数据,因此我需要它如何工作的逻辑更加清晰。我已经为此工作了几个小时,需要顿悟!
  • 第二个和第三个VR1620不应该是VR1152VR16211吗?
  • 您可以使用var_export($vararray) 以便我将其粘贴到代码中吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-19
  • 1970-01-01
相关资源
最近更新 更多