我在$brands
中创建了一个数组class Cars
,print_r
输出如下所示:
Array ( [0] => Array ( [id] => 1
[name] => 'Porsche'
)
[1] => Array ( [id] => 2
[name] => 'Bugatti'
)
[2] => Array ( [id] => 3
[name] => 'BMW'
)
)
但是当我想链接到某个品牌时,我不想使用strtolower()
制作一个小写的超链接。我想回复$cars->brands[$i]['url']
(而不是strtolower($cars->brands[$i]['name'])
)。
所以我需要创建一个for循环,在数组中创建['url']
键。我认为foreach会起作用:
foreach ($this->brands as $brand => $row) {
$row['url'] = strtolower($row['name']);
}
但它没有。即使这样也行不通:$row['name'] = strtolower($row['name']);
。
但是这很有效:
for ($i = 0; $i < count($this->brands); $i++) {
$this->brands[$i]['url'] = strtolower($this->brands[$i]['name']);
}
我的问题是:怎么样?为什么呢?
答案 0 :(得分:4)
您需要处理参考。插入&amp;它会起作用
foreach ($this->brands as $brand => &$row) {
$row['url'] = strtolower($row['name']);
}
或者您可以使用原始数组,如:
foreach ($this->brands as $brand => $row) {
$this->brands[$brand]['url'] = strtolower($row['name']);
}
答案 1 :(得分:3)
如果要编辑正在迭代的元素,可以在$ row
之前添加&
foreach ($this->brands as $brand => &$row) {
$row['url'] = strtolower($row['name']);
}
但这不是必需的,只需从foreach循环外部可用的变量访问数组,例如$this->brands
foreach ($this->brands as $brand => $row) {
$this->brands[$brand]['url'] = strtolower($row['name']);
}
答案 2 :(得分:2)
因为你要覆盖数组键('url')。
$ row 是 $ this-&gt;品牌的本地副本 $ row 的任何更改都不会反映在 $上这 - &GT;品牌即可。更改此
foreach ($this->brands as $brand => $row) {
$row['url'] = strtolower($row['name']);
}
用这个
foreach ($this->brands as $brand => $row) {
$this->brands[$brand]['url'] = strtolower($row['name']);
}
快乐编码。