【问题标题】:PHP: Multidimensional array, multidimensional keys?PHP:多维数组,多维键?
【发布时间】:2011-09-20 03:05:52
【问题描述】:
$products = array(
  'paper' => "Paper Section" => array
  (
    'copier' => "Copier and Multipurpose",
    'inkjet' => "Inkjet Printer",
  ),
  'pens' => "Pen Section" => array
  (
    'ball' => "Ballpoint Pens",
    'hilite' => "Highlighters"
  ),
  'misc' => "Miscellaneous Section" => array
  (
    'tape' => "Sticky Tape",
    'glue' => "Adhesive"
  )
);

echo "<pre>";
foreach ($products as $section => $items)
  foreach ($items as $key => $value)
    echo "$section:\t$key\t($value)<br />";
echo "</pre>";

很明显,我在这里要做的是将索引分配给 $section 集,但我在尝试这样做时遇到了错误。是否有其他方法可以做到这一点,或者在 PHP 中是不可能的?

【问题讨论】:

  • 哦,是的,这个问题就是炸弹。 2,500 次观看和 -1 评级。哈哈哈

标签: php arrays multidimensional-array indexing array-key


【解决方案1】:
$products = array(
  'paper' => array(
    'title' => "Paper Section",
    'copier' => "Copier and Multipurpose",
    'inkjet' => "Inkjet Printer"
  )
);   

例如,类似于上述内容。另一种选择是添加另一个维度:

$products = array(
  'paper' => array(
    'meta' => array(
        'title' => "Paper Section"
    ),
    'data' => array(
        'copier' => "Copier and Multipurpose",
        'inkjet' => "Inkjet Printer"
    )
  )
);

【讨论】:

  • 谢谢。这很有意义。
  • 我选择了这个作为答案,因为另一个答案中的第二个解决方案不起作用。
【解决方案2】:

您想要做的是数组中的另一个维度。这就是您的问题的解决方案。

【讨论】:

    【解决方案3】:
    <?php
    $products = array(
        'paper' => array(
        // --------^^^^^
            'Paper Section' => array(
                'copier' => 'Copier and Multipurpose',
                'inkjet' => 'Inkjet Printer',
            ),
        )
    );
    var_dump($products);
    

    PS:更好地格式化(和缩进)代码会更容易。

    【讨论】:

    • 我更喜欢缩进的方式,因为它更容易阅读。
    【解决方案4】:

    不太了解您要达到的目标,我仍然会试一试。下面,我对数据进行了重组:

    $products = array(
      'paper' => array(
        'Paper Section',
        array (
          'copier' => "Copier and Multipurpose",
          'inkjet' => "Inkjet Printer"
        )
      ),
      'pens' => array(
        'Pen Section',
        array (
          'ball' => "Ballpoint Pens",
          'hilite' => "Highlighters"
        )
      ),
      'misc' => array(
        'Miscellaneous Section',
        array (
          'tape' => "Sticky Tape",
          'glue' => "Adhesive"
        )
      )
    );
    
    foreach ($products as $sectionKey => $line) {
      foreach ($line[1] as $key => $value) {
        echo $sectionKey . ":\t" . $line[0] . ":\t$key\t($value)\n";
      }
    }
    

    您可以在 Ideone 上see a demo

    【讨论】:

      【解决方案5】:
          $products = array(
            'paper' => array(
              "Paper Section" => array
                (
                  'copier' => "Copier and Multipurpose",
                  'inkjet' => "Inkjet Printer",
                )
             ),
            'pens' => array(
              "Pen Section" => array
              (
                  'ball' => "Ballpoint Pens",
                  'hilite' => "Highlighters"
                ),
            ),
            'misc' => array(
              "Miscellaneous Section" => array
              (
                  'tape' => "Sticky Tape",
                  'glue' => "Adhesive"
                )
            )
      );
      

      正如其他人所提到的,您需要将其包装在另一个关联数组中。

      但是,我感觉您正在尝试一次将最深的关联数组分配给两个键。如果是这种情况,你不能在 PHP 的数组声明中这样做,你必须手动做一些事情,比如:

      $products = array();
      $products['Misc'] = $products['Miscellaneous Section'] = array(
            'tape' => "Sticky Tape",
            'glue' => "Adhesive"
      );
      
      var_dump($products);
      

      【讨论】:

      • 第二个代码sn-p返回错误:Parse error: syntax error, unexpected T_VARIABLE in /code/cUKR0g on line 3 codepad.viper-7.com/cUKR0g
      【解决方案6】:

      嗯,对我来说,你想要做的事情远非显而易见,但你的语法是错误的:像'key'=&gt;'value' 这样构建一个数组,因为它是一个键/值对你有:

      'paper' => "Paper Section" => array()
      

      key-&gt;value-&gt;value。那是行不通的。

      还有:

      echo "
      ";
      

      可能是:

      echo "\n";
      

      【讨论】:

      • 我猜这是因为数组与字符串或其他东西存储在相同的命名空间中?我实际上是在考虑 value->key->value 或 key->value->subvalue.... 当然,我还在学习。无论如何,谢谢你提供的信息。
      • 当我做

        时它给了我那些空白
      • 啊。修复了您的代码 -> 在输入代码时使用 wysiwig 栏上的 {} 按钮,这是最简单的方法 :)
      • 谢谢。这一直困扰着我这么多。 X// 很高兴终于弄清楚如何绕过它。
      猜你喜欢
      • 2021-11-28
      • 1970-01-01
      • 1970-01-01
      • 2013-11-27
      • 2021-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多