我这里有这个代码。我试图遍历我拥有的数组并替换color_codes中的所有哈希和破折号。它有效,但我在str替换行上收到错误undefined offset 2
。它还在末尾添加另一个名为'color_codes'的数组。
for ($i = 0; $i < count($colours); $i++) {
for ($ii = 0; $ii < count($colours[$ii]); $ii++) {
$colours[$i][$ii]['color_codes'] = str_replace(',','-', $colours[$i][$ii]['color_codes']);
$colours[$i][$ii]['color_codes'] = str_replace('#','', $colours[$i][$ii]['color_codes']);
}
}
原始数组
Array
(
[0] => Array
(
[0] => Array
(
[item_color] => Black
[color_codes] => #000000,#000000
)
[1] => Array
(
[item_color] => Red
[color_codes] => #FF0033,
)
)
[1] => Array
(
[0] => Array
(
[item_color] => White
[color_codes] => #FFFFFF,
)
[1] => Array
(
[item_color] => Black
[color_codes] => #0C0C0C,#0C0C0C,
)
)
)
在foreach
之后创建的数组Array
(
[0] => Array
(
[0] => Array
(
[item_color] => Black
[color_codes] => 000000-000000-
)
[1] => Array
(
[item_color] => Red
[color_codes] => FF0033-
)
[2] => Array
(
[color_codes] =>
)
)
[1] => Array
(
[0] => Array
(
[item_color] => White
[color_codes] => FFFFFF-
)
[1] => Array
(
[item_color] => Black
[color_codes] => 0C0C0C-0C0C0C-
)
[2] => Array
(
[color_codes] =>
)
)
)
我不知道问题出在哪里,它与Undefined offset error
答案 0 :(得分:5)
for ($ii = 0; $ii < count($colours[$ii]); $ii++) {
应该是
for ($ii = 0; $ii < count($colours[$i]); $ii++) {
但您可以使用foreach
赞成for
循环。
答案 1 :(得分:2)
你做错了,改变循环如下,
for ($i = 0; $i < count($colours); $i++) {
// Here it should be less than count of $colours[$i]
for ($ii = 0; $ii < count($colours[$i]); $ii++) {
$colours[$i][$ii]['color_codes'] = str_replace(',','-', $colours[$i][$ii]['color_codes']);
$colours[$i][$ii]['color_codes'] = str_replace('#','', $colours[$i][$ii]['color_codes']);
}
}
答案 2 :(得分:2)
使用$ colors [$ i]替换$ colors [$ ii]:
for ($i = 0; $i < count($colours); $i++) {
for ($ii = 0; $ii < count($colours[$i]); $ii++) {
$colours[$i][$ii]['color_codes'] = str_replace(',','-', $colours[$i][$ii]['color_codes']);
$colours[$i][$ii]['color_codes'] = str_replace('#','', $colours[$i][$ii]['color_codes']);
}
}
为了遍历二级数组,您需要正确获取该数组的大小。 正如xdazz提到的foreach循环会澄清很多事情。此外,str_replace需要数组进行搜索和替换。这意味着您可以为每种颜色使用单个str_replace行:
foreach ($colours as &$level1) {
foreach ($level1 as &$level2) {
$level2['color_codes'] = str_replace(array(',', '#'), array('-', ''), $level2['color_codes']);
}
}