具有关联数组的PHP foreach函数的正确语法

时间:2012-04-24 14:06:21

标签: php arrays foreach associative-array

我在PHP中有以下名为$ ingredient_difference的数组(下面的示例输出):

Array (
  [total_remaining_ingredients] => Array (
    [0] => 2 [1] => 3 [2] => 10
  )
  [idrecipe] => Array (
    [0] => 8 [1] => 10 [2] => 9
  )
  [value] => Array ( [0] => 1 [1] => 1 [2] => 1 )
) 

我正在尝试使用'foreach'至少提取idrecipe的值,但我使用以下代码获取未定义的索引:

foreach($ingredient_difference as $recipe_output)
{
    echo $recipe_output['idrecipe']."<br />";
}

我知道上面的方法不完全正确,但这也没有用('idrecipe','value'和'total_remaining_ingredients'未定义索引错误):

foreach($ingredient_difference as $c => $rowkey)
{
    $sorted_idrecipe[] = $rowkey['idrecipe'];
    $sorted_value[] = $rowkey['value'];
    $sorted_remaining_ingredients[] = $rowkey['total_remaining_ingredients']; 
}

我的foreach语法中缺少什么?或者有更好的方法吗?

这个foreach结构也提供了未定义的索引错误:

foreach($ingredient_difference as $rowkey => $index_value)
{
    $id_value[$key] = $index_value['idrecipe'];
    $value_value[$key] = $index_value['value'];
    $tri_value[$key] = $index_value['total_remaining_ingredients'];
}

感谢ComFreek:

$result_ingredient_difference = array();
$count_id = count($ingredient_difference['idrecipe']);

for ($i=0; $i<$count_id; $i++)
{
  $result_ingredient_difference[] = array(
  'tri' => $ingredient_difference['total_remaining_ingredients'][$i],
  'idrecipe' => $ingredient_difference['idrecipe'][$i],
  'value' => $ingredient_difference['value'][$i]
  );
}
//rearranged array of $result_ingredient_difference able to call proper indexing with the below
foreach($result_ingredient_difference as $rowkey => $index_value) 
{ 
  $id_value[$key] = $index_value['idrecipe']; 
  $value_value[$key] = $index_value['value']; 
  $tri_value[$key] = $index_value['tri'];
} 

2 个答案:

答案 0 :(得分:4)

使用第一个foreach()循环,迭代主数组,而不是遍历子数组idrecipe的值!

foreach($ingredient_difference['idrecipe'] as $value)
{
  echo $value;
}

答案 1 :(得分:2)

foreach构造一个循环。在你的代码中

foreach($ingredient_difference as $recipe_output) {
echo $recipe_output['idrecipe']."<br />"; }
在第一个循环运行中

:$ recipe_output是$ ingredient_difference [total_remaining_ingredients] 在第二个循环运行:$ recipe_output是$ ingredient_difference [idrecipe] 在第三个循环运行中:$ recipe_output是$ ingredient_difference [value]

因为没有

$ingredient_difference['total_remaining_ingredients']['idrecipe']
$ingredient_difference['idrecipe']['idrecipe']
$ingredient_difference['value']['idrecipe']

你得到了错误。

查看foreach循环如何工作使用http://php.net/manual/de/control-structures.foreach.php

上的示例

我期待你想做的是:

foreach($ingredient_difference['idrecipe'] as $value_of_recipe)
{
    echo $value_of_recipe."<br />";
}