PHP: многомерный массив, многомерные ключи?
$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?
6 ответов
$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"
)
)
);
Что ж, это далеко не очевидно для меня, что вы пытаетесь сделать, но ваш синтаксис неверен: массив строится как 'key'=>'value'
потому что это пара ключ / значение У вас есть:
'paper' => "Paper Section" => array()
key->value->value
, Это не сработает.
также:
echo "
";
Возможно:
echo "\n";
То, что вы хотите сделать, это другое измерение в вашем массиве. И это решение вашей проблемы.
<?php
$products = array(
'paper' => array(
// --------^^^^^
'Paper Section' => array(
'copier' => 'Copier and Multipurpose',
'inkjet' => 'Inkjet Printer',
),
)
);
var_dump($products);
PS: легче, когда вы лучше форматируете (и делаете отступ) свой код.
$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);
Не совсем понимая, чего ты пытаешься достичь, я все равно попробую. Ниже я реструктурировал данные:
$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.