PHP的foreach在多维数组中返回最后一行。

5

我正在尝试从多维数组中获取用户的值,如下所示:

$array = array();

$array["id"] = "1";
$array["name"] = "name1";
$array["country"] = "country1";

$array["id"] = "2";
$array["name"] = "name2";
$array["country"] = "country2";

$array["id"] = "3";
$array["name"] = "name3";
$array["country"] = "country3";

$array["id"] = "4";
$array["name"] = "name4";
$array["country"] = "country4";

foreach($array as $e){
    print_r($e);
}

它只返回4name4country4

我需要获取像这样的行

foreach($array as $e){
    $id=$e['id'];
    $name=$e['name'];
    $country=$e['country'];
    echo $id.'/'.$name.'/'.$country.'<br>';
}

但是这个代码给我报错了,错误信息如下:Illegal string offset 'id'。根据我的理解,这个数组应该会返回所有的值,不知道为什么会出现这个问题,请检查一下这个简单的数组为何不能正常工作,并提供任何可能的解决方案。

您正在覆盖 key - Sougata Bose
@b0s3,有没有一种批量处理多个密钥的方法。 - user1411607
你可以这样做:$temp_array["id"] = "1";$temp_array["name"] = "name1";$temp_array["country"] = "country1"; 然后使用 array_push($array, $temp_array),对于每个数组集合都应该这样做。 - Subash
你的数组仅包含最后一个元素。请检查 print_r($array);。 - Suman Singh
@TallboY 请看我的回答...在我的回答中,您不必手动指定数组键.... - Umair Ayub
3个回答

3

目前您正在覆盖 key。需要正确添加 key。您必须像这样构建数组 -

$array[0]["id"] = "1";
$array[0]["name"] = "name1";
$array[0]["country"] = "country1";

$array[1]["id"] = "2";
$array[1]["name"] = "name2";
$array[1]["country"] = "country2";

或者

$array = array(
   0 => array('id' => 1, 'name' => 'name1', 'country' => 'country1'),
   1 => array('id' => 2, 'name' => 'name2', 'country' => 'country2'),
);

3

相反,这样做可以避免手动指定数组键值

$array = array();

$array[] = array("id" => 123,  "name" => "Your name",  "country" =>  "UK");
$array[] = array("id" => 1342,  "name" => "Your name 2 ",  "country" =>  "UK");

然后在 foreach 中执行以下操作

foreach($array as $key => $val){

echo $key. ":     ".$val['id']. " " . $val['name'];
}

这个解决方案也不错,但在我的应用程序中,我必须更改值,如果数组有一个键,那将更容易。谢谢 - user1411607
@TallboY,请看一下我编辑过的答案,注意foreach循环中有一个$key变量,它将包含正在迭代的$array值的键。 - Umair Ayub

1
你需要创建一个多维数组,就像这样,现在你正在多次覆盖该数组。
$arrays = [
  [0]=>
    ["id"] => "1",
    ["name"] => "name1",
    ["country"] => "country1"
  ], 
  [1]=>[
     ...
  ]
];
foreach($arrays as $array){
    $id=$array['id'];
    $name=$array['name'];
    $country=$array['country'];
    echo $id.'/'.$name.'/'.'$country'.'<br>';
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接