2012-07-20 82 views
-2

我想问一下这是什么样的错误未定义抵消:4PHP删除未定义,偏移:

我的代码是

$url = 'http://gogo.com, http://yoyo.com, http://gogo.com, http://yoyo.com, http://gogo.com, http://yoyo.com'; 
$key = 'key1, key2, key3'; 


$xurl = explode("\n", $url); 
$xkey = explode("\n", $key); 

$count = count($xkey); 
echo $count; 
$i = 0; 

while ($i <= $count) { 
    if(empty($xkey[$i])){ 
     unset($xkey[$i]); 
    } 

    echo $xkey[$i]; 

$i++; 
} 

回声key1 key2 key3

,但事情是,我需要循环xkey等于我的网址 所以回声应该是,但我只有3关键字我的意思是关键字小于网址。

我怎样才能让这样的事情......下面

http://gogo.com - key1 
http://yoyo.com - key2 
http://gogo.com - key3 
http://yoyo.com - key1 
http://gogo.com - key2 
http://yoyo.com - key3 
+3

您使用<=在while循环。只有<是因为你开始用0注释。所以3个项目将导致索引0,1和2. – 2012-07-20 11:11:00

回答

4

它的意思是,脚本正在寻找的$xkey[4]的值,但该元素不存在。这是因为这样的数组键是基于0的,所以第四个元素将是$xkey[3]。改变你的while语句while ($i < $count)作为计数为4,但最大关键将是3

+0

okie先生谢谢你,让我试试。 – Butternut 2012-07-20 11:12:30

+0

先生它的工作非常感谢你... – Butternut 2012-07-20 11:13:02

+1

+1 - 重要的是要注意,这只适用于具有连续键的0索引数组。在这种情况下,对于输入数组而言,这总是正确的,因为您直接使用'explode()'的结果,但它不是真的到处都是,并且完全与关联数组分开。这就是为什么一般情况下,如果你想迭代一个数组,最安全的循环结构是'foreach'。它也有创造更加整洁的代码的好的副作用。 – DaveRandom 2012-07-20 11:14:52

1

你做

while ($i <= $count) { 

其中$ count是在$ x键元件的数量(让说,4元素) 由于数组是0索引,元素$ xkey [3]是第4个也是最后一个元素。

$ xkey [4]会给你带来那个错误。

现在,在这个while ($i <= $count) {中删除“=”,它应该消失。

0

我不确定从哪里开始解释你的问题是什么,你有一个完全错误的方法。为了得到你想要的结果,你需要这样做:

$urlString = 'http://gogo.com, http://yoyo.com, http://gogo.com, http://yoyo.com, http://gogo.com, http://yoyo.com'; 
$keyString = 'key1, key2, key3'; 

$urls = explode(',', $urlString); 
$keys = explode(',', $keyString); 

$i = 0; 
$count = count($keys); 

foreach ($urls as $url) { 
    echo $url, ' - ', $keys[$i % $count], PHP_EOL; 
    $i++; 
} 
+0

所以你终于加入了100K俱乐部。再来10个我。很好的使用模数,我总是因为某种原因而忘记它,甚至当我记得我不得不停下来做一些数学... – DaveRandom 2012-07-20 11:18:06

+0

谢谢。别人downvote的解释也会很好。 – deceze 2012-07-20 11:21:14