PHP undefined offset 2

时间:2013-12-17 11:28:53

标签: javascript php arrays

我这里有这个代码。我试图遍历我拥有的数组并替换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

分开

3 个答案:

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