为什么php处理不同于foreach?

时间:2017-03-30 11:24:15

标签: php arrays

我在$brands中创建了一个数组class Carsprint_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']))。

class Cars {

所以我需要创建一个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']);
}

}

我的问题是:怎么样?为什么呢?

3 个答案:

答案 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']);
}

快乐编码。