【问题标题】:Proper Syntax for PHP foreach function with associative arrays具有关联数组的 PHP foreach 函数的正确语法
【发布时间】:2012-05-05 04:35:26
【问题描述】:

我在 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'];
} 

【问题讨论】:

    标签: php arrays foreach associative-array


    【解决方案1】:

    在您的第一个 foreach() 循环中,您迭代主数组而不是子数组 idrecipe!的值!

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

    【讨论】:

    • 谢谢。这肯定会获得“idrecipe”的价值。我将如何获取三个不同的索引(即“idrecipe”、“value”和“total_remaining_ingredients”)。我认为使用类似 foreach($ingredient_difference as $key => $value) 的方法可以解决问题,但我没有成功。
    • 你到底想做什么?如果您只有三个条目,则没有必要。您的 foreach() 是正确的,但我认为您以错误的方式访问特定值。请给我们看代码。
    • 我没有为“idrecipe”、“value”和“total_remaining_ingredients”索引运行三个不同的foreach循环,而是想知道是否有一种方法可以只构建一个foreach循环来获取所有索引的值三。请参阅上面的修改代码,这给了我未定义的索引错误。
    • 是的——我认为这样可以解决问题。我会在测试后发布我的结果。谢谢。
    【解决方案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 />";
    }
    

    【讨论】:

      猜你喜欢
      • 2018-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-02
      • 1970-01-01
      • 2014-07-07
      • 2011-11-26
      • 1970-01-01
      相关资源
      最近更新 更多