2013-12-17 115 views
0

我在这里有此代码。我试图循环遍历我所拥有的数组,并替换color_codes中的所有哈希和破折号。它的工作原理,但我在str替换线上出现错误undefined offset 2。它也在最后添加了一个名为'color_codes'的数组。PHP未定义偏移量2

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

回答

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']); 
    } 
} 
+0

我很盲目!谢谢你的帮助。 – user3004208

+0

它发生了。很高兴帮助你:) – Rikesh

5
for ($ii = 0; $ii < count($colours[$ii]); $ii++) { 

应该

for ($ii = 0; $ii < count($colours[$i]); $ii++) { 

但是你可以使用foreach赞成,for循环。

+0

感谢您的帮助 – user3004208

2

在第二替换$颜色[$ II]与$颜色[$ i]:

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