PHP: многомерный массив, многомерные ключи? - PullRequest
2 голосов
/ 22 июня 2011
<code>$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 "
";

Очевидно, что я пытаюсь здесь сделать, назначить индексы для набора $ section, и я получаю ошибки за попытку сделать это. Есть ли другой способ сделать это, или это просто невозможно в PHP?

Ответы [ 6 ]

8 голосов
/ 22 июня 2011
$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"
    )
  )
);
1 голос
/ 22 июня 2011

Ну, для меня далеко не очевидно, что вы пытаетесь сделать, но ваш синтаксис неправильный: массив строится как 'key'=>'value', потому что это пара ключ / значение. У вас есть:

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

key->value->value. Это не сработает.

также:

echo "
";

Может быть:

echo "\n";
1 голос
/ 22 июня 2011
    $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);
1 голос
/ 22 июня 2011

Не совсем понимая, чего ты пытаешься достичь, я все равно попробую.Ниже я реструктурировал данные:

$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.

1 голос
/ 22 июня 2011
<?php
$products = array(
    'paper' => array(
    // --------^^^^^
        'Paper Section' => array(
            'copier' => 'Copier and Multipurpose',
            'inkjet' => 'Inkjet Printer',
        ),
    )
);
var_dump($products);

PS: легче, когда вы лучше форматируете (и делаете отступ) свой код.

1 голос
/ 22 июня 2011

То, что вы хотите сделать, это другое измерение в вашем массиве.И это решение вашей проблемы.

...