2013-04-29 53 views
-1

那么,基本上这个代码所做的就是从网站的源代码中获取一些链接并将它们发送给一个mp3播放器。 最大的问题是在get_link函数中,我想将url存储到数组中。 im有问题的部分被评论。 对不起,发布所有这些代码,但功能相互连接。PHP Array只存储最后一个值

function getHost($db,$id){ 
     if(isset($_GET['id'])){ 

      $sql1 = "SELECT host FROM mixtape WHERE id=?"; 
      $stm = $db->prepare($sql1); 
      $stm->execute(array($id)); 
      $row1 = $stm->fetch(PDO::FETCH_ASSOC); 

      if($row1['host']=='host1'){ 

       $sql2 = "SELECT link1 FROM faixa WHERE id_mixtape IN(SELECT id FROM mixtape WHERE id=?)"; 
       $stm = $db->prepare($sql2); 
       $stm->execute(array($id)); 

       $rows_affected = $stm->rowCount(); 
         $array=array(); 
       if (count($rows_affected) > 0) { 
        for($i=1; $i <= $rows_affected; $i++) { 

         $row2 = $stm->fetch(PDO::FETCH_ASSOC); 
         $url=$row2['link1']; 

         get_Link($db,$url,$i,$rows_affected,$array);       
        } 
       } 
      } 
     } 
    } 

    function get_Link($db,$url,$pos,$rows_affect,$array){ 

     $find = 'url:'; 
     $reg_exUrl = "/(http|https|ftp|ftps)\:\/\/[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(\/\S*)?/"; 
     $data = file_get_contents($url); 
     $data = explode("\n", $data); 

     for ($line = 0; $line < count($data); $line++) { 
      if (strpos($data[$line], $find) !== false) { 
       $link = preg_replace($reg_exUrl,"", $data[$line]); 
       $v[]=$link; 
      } 
     } 

     if($pos!=$rows_affect-1){ 
      $url="mylink.com/".$link."|"; 
     }else{ 
      $url="mylink.com/".$link."&amp"; 
     } 

     $array[$pos]=$url; 
     var_dump($array); // Here says that are 3 values in the array. True 

     if($pos==$rows_affect-1){ 
      var_dump($array); // Here is only showing the last value in the array. Why? 
      player($db,$array); 
     } 
    } 

    function player($db,$array){ 
     if(isset($_GET['id'])){ 
      foreach($array as $i=>$item){ 
       echo $item; 
      } 
     } 
    } 
+2

简单的原因是,你有一个foreach内界定你的阵列,同时,for..etc循环将不断覆盖它,将数组移到循环外 – 2013-04-29 14:05:24

+0

声明你的$ array = array(); – Nagasaki 2013-04-29 14:08:14

+0

@DarylGill你可以更具体吗?我有点不喜欢阵列上的Isnt我的数组以外的get_Link函数? – miguelfsf 2013-04-29 14:10:42

回答

0

Miguelfsf,您必须首先了解变量的作用域。

你的问题是,你创建了$ array = array()($ array显示为$ row2)。 你宣布一个新的变量,但你没有用,$阵列只是告诉你,你的声明数组的方式

$row2=array(). 

之后,你需要做的

$row2[] = $stm->fetch(PDO::FETCH_ASSOC); 

为什么? 因为assoc会返回一个关联数组,所以它会做 $ array => {title =>“last title”= $ newData => {title =>“new title”} 它会替换值 使用[ ]每次你这样做,它会创建一个新元素。 然后

{ 
    0 => { title => "title1"} 
    1 => { title => "title2"} 
    2 => { title => "title3"} 
    3 => { title => "title4"} 
} 
1

这段代码:

$c=0; 

    for ($line = 0; $line < count($data); $line++) { 
     if (strpos($data[$line], $find) !== false) { 
      $link = preg_replace($reg_exUrl,"", $data[$line]); 
      $v[$c]=$link; 
     } 
    } 

应该是这样的:

$c=0; 

    for ($line = 0; $line < count($data); $line++) { 
     if (strpos($data[$line], $find) !== false) { 
      $link = preg_replace($reg_exUrl,"", $data[$line]); 
      $v[$c]=$link; 
      $c = $c+1; //this is missing or $c++; 
     } 
    } 

OR:

for ($line = 0; $line < count($data); $line++) { 
     if (strpos($data[$line], $find) !== false) { 
      $link = preg_replace($reg_exUrl,"", $data[$line]); 
      $v[]=$link; //That way works too 
     } 
    } 
+0

尝试了两种方法,仍然只打印数组的最后一个值。无论如何,感谢您的帮助 – miguelfsf 2013-04-29 14:18:23