【问题标题】:update multidimensional array in foreach loop在 foreach 循环中更新多维数组
【发布时间】:2016-02-26 21:17:37
【问题描述】:

我有一个多维数组,并且在 foreach 循环中回显了键和值。我想在“id”(键)旁边有一个更新框来更新 id 值,并在“大小”(键)旁边有一个更新框来更新大小值

问题:: Bellow 是我的代码,输入框回显每个键的正确值,但是当我点击更新按钮时,它不会更新...

更新不必在 foreach 循环中,顺便说一句。我只是认为这会更容易

提前感谢所有帮助

代码

        <?php
session_start();

 $array=array(
'Homer' => Array
(
    'id' => 111,
    'size' => 54

),
  'Marge' => Array
(
    'id' => 222,
    'size' => 12

),
'Bart' => Array
(
    'id' => 333,
    'size' => 3
)
);
// update if submit
if (isset($_POST["submit"])) 
{
    // i tired a number of things here but it was all errors 

}
echo "<form method='post' action=''>";

// put the array in a session variable
if(!isset($_SESSION['simpsons']))
$_SESSION['simpsons']=$array;


// getting each array in a foreach loop         
foreach( $_SESSION['simpsons'] as $character => $info) { 

        echo $character.': id is '.$info['id'].', size is '.$info['size'];
        //add and update input box for each ' id '      and    '  size '


?>

<!-- input for id -->
<input name="<?php $character ?>" value="<?php echo $info['id'] ?>">
<!-- input for size-->
<input name="<?php $character ?>" value="<?php echo $info['size'] ?>">

<?php

echo"<br/>"; 
}

?>

<!-- submit button for the form -->
<input class="inputbox" type="submit" value="Update value of key" name="submit"/>
</form>

【问题讨论】:

  • 你只是忘了在你的输入name属性中写echo。并且需要将name 属性设置为数组。所以你输入的标签看起来像&lt;input name="&lt;?php echo $character ?&gt;[]" value="&lt;?php echo $info['id'] ?&gt;"&gt;
  • @hardiksolanki 即使他这样做了,他也会有两个同名的输入元素,它们不是收音机,所以从技术上讲,一个被覆盖了。他必须使用[] 括号
  • @FlorianMüller 检查我的更新答案。
  • @hardiksolanki 因此我在同一时刻添加了关于括号的句子;D
  • @FlorianMüller:在您发表评论之前,我已经更新了我的答案:D

标签: php arrays multidimensional-array foreach


【解决方案1】:

foreach 应该是

    foreach( $_SESSION['simpsons'] as $tt2) {
       print_r($tt2);
        foreach($tt2 as $character => $info){

       echo $character.': id is '.$info['id'].', size is '.$info['size'];
       //add and update input box for each ' id '      and    '  size '
      }
   }

【讨论】:

  • 没有使用这种方式打印:S
  • 第一个foreach print_r($tt2);
  • 谢谢:)。但是如何更新大小和 ID。我仍然可以让它工作;s
  • print_r($tt2) 打印什么?什么是印刷品?
【解决方案2】:

您有两个具有相同名称的输入(两次 &lt;input name="Homer" ...&gt;)。我建议一个通用的解决方案:

<input type="text" name="names[]" value="<?php echo $character;?>" />
<input type="text" name="ids[]" value="<?php echo $info['id'];?>" />
<input type="text" name="sizes[]" value="<?php echo $info['size'];?> />

然后您将通过邮寄方式在您的 PHP 编码中接收数据(如果您不想将名称视为输入字段,请将其设为 type="hidden")。

<?php
$names = $_POST['names'];
$ids = $_POST['ids'];
$sizes = $_POST['sizes'];
foreach ($names as $key=>$value) {
    //name is $value
    //id is $ids[$key]
    //size is $sizes[$key]
}

【讨论】:

  • 感谢您的回复,它仍然不允许我更新它。我把 $_SESSION['simpsons'][$character] = $ids;和 $_SESSION['simpsons'][$character] = $size;在 foreach 语句中?
  • 您没有更新任何问题。如果要更新会话值,可以在我的循环中执行:$_SESSION['simpsons'][] = array('name'=$value,'id'=&gt;$ids[$key],'size'=&gt;$sizes[$key]);
猜你喜欢
  • 2015-06-02
  • 2018-07-13
  • 2022-12-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-30
  • 1970-01-01
相关资源
最近更新 更多