Как мне получить более продвинутый массив? - PullRequest
0 голосов
/ 28 октября 2009

Обычно я в настоящее время помещаю кучу значений в массив следующим образом:

$flavors = array('Original','Cherry','Chocolate','Raspberry','Mango');

и из этого я мог бы выполнить foreach примерно так:

    foreach($flavors as $flav) {

    echo doSomething($flav);

}

Это все работает, пока я не перейду к следующему этапу моего обучения, который, возможно, должен поместить 2 переменные в doSomething ().

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

 echo doSomething($flav, $ingredient_of_this_flav);

Я не уверен, есть ли способ сделать это ... Я полагаю, мне может понадобиться второй массив полностью, где я использую значения выше в качестве своих ключей? * 1012 например *

$ingredients = array('Original' => 'boring stuff', 'Cherry' => 'cherries and other stuff') etc

И тогда я бы сделал что-то (), как это

    foreach($flavors as $flav) {

    echo doSomething($flav, $ingredients[$flav]);

}

Полагаю, мне следует попробовать это сейчас. Это лучший подход или есть лучший способ сделать это? В идеале я бы хотел, чтобы один массив не устанавливал $ flavors и $ ингридиенты.

Спасибо за ваше время.

Ответы [ 4 ]

1 голос
/ 28 октября 2009

Массивы в php ассоциативны, как вы заметили. И если я правильно понимаю, вы ищете синтаксис для циклического прохождения каждой пары ключ / значение?

foreach($ingredients as $flav => $ingredient) {
  echo doSomething($flag, $ingredient);
}

Это то, что вы ищете?

Если вы хотите иметь сложные значения для каждого ключа, чем вы, возможно, захотите взглянуть на объекты или более грубую версию, массивы массивов.

$ingredients = array('Cherry' => array('Cherries', 'Other stuff'));

И ваш $ingredient в цикле выше будет массивом.

0 голосов
/ 28 октября 2009

Вы почти у цели. Я бы установил для массива что-то вроде:

$ingredients = array('Original' => array('boring stuff', 'boring stuff2'), 'Cherry' => array('cherries', 'other stuff'));

А затем выполните цикл следующим образом:

foreach($flavors as $flav => $ingredient) {

        echo doSomething($flav, $ingredient);

}

Конечно, все зависит от того, что вы делаете в doSomething ()

0 голосов
/ 28 октября 2009

Вы можете указывать ключи и значения массива.

   foreach ($ingredients as $flav => $ingredients) 
   {
       echo doSomething($flav, $ingredients);
   }
0 голосов
/ 28 октября 2009

Я бы использовал ассоциативный массив (он же хеш-таблицу) с подходом flavor => ингридиенты. Примерно так:

$flavors = array ('Cherry' => array('stuff1', 'stuff2'), 
                  'Mango' => array('stuff1', 'stuff3'));

echo $flavors['Cherry'][0]; // stuff1

foreach($flavors as $flavor => $ingredients)
{
  print $flavor;
  // $ingredients is an array so we need to loop through it
  foreach($ingredients as $ingredient)
  {
    print $ingredient;
  }
}

Это известно как вложенная петля и будет печатать аромат и каждый ингредиент.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...