2015-01-08 102 views
1

我有以下陣列$myarr和$ url值這樣:從數組返回值,如果匹配的網址在PHP

$url = "http://www.example.com/jane-doe/testingideas.html"; 


stdClass Object 
(
    [items] => Array 
     (
      [0] => stdClass Object 
       (
        [updated] => 2015-01-08 17:22:23.279210 
        [url] => http://www.example.com/jane-doe/testingideas.html 
        [score] => 21.053322 

       ) 

      [1] => stdClass Object 
       (
        [updated] => 2015-01-08 17:22:23.279226 
        [url] => http://www.example.com/john-doe/ideas.html 
        [score] => 18.889984 
       ) 
) 

) 

陣列擁有超過2000點的值。我複製2來簡化事情。我需要根據URL檢索分數。這是我寫的代碼:

$myarr = $output->items; 
    foreach ($myarr as $val){ 
     if ($val->url == $url) { 
     $score = round($val->score); 
    } else $score = 'N/A'; 
    } 

這不起作用,因爲即使URL匹配,它也沒有找到任何分數。

我也修剪這兩個網址來刪除任何空格,但我有同樣的問題。

回答

0

這應該爲你工作:

foreach ($myarr as $items) { 
    foreach($items as $item) { 

     if ($item->url == $url) { 
      $score = round($val->score); 
     } else { 
      $score = 'N/A'; 
     } 

    } 
} 
+0

你的答案和我做過的事情不一樣。它與網址不匹配。對不起,我忘了添加一行代碼對不起。但這並沒有錯。實際的網址都輸出並且與眼睛相匹配。但代碼在這些情況下不能解決分數問題。 – nodejsj

+0

@stacknoob如果你有一個包含這個的數組(你在問題中顯示了什麼),但是你這樣分配它:'$ myarr = $ output-> items;'那麼print_r($ myarr)的輸出是什麼? ;'?! (也試一試'trim()'這兩個值,所以沒有隱藏的空格) – Rizier123

0
$url = "http://www.example.com/jane-doe/testingideas.html"; 
$myarr = $output->items; 
foreach ($myarr as $val){ 
    if (strcmp($val->url,$url) == 0) { 
     $score = round($val->score); 
    } else { 
     $score = 'N/A'; 
    } 
} 
+0

我用過這個,然後在N/A case後面加上echo strcmp($ val-> url,$ thisurl);它返回從-512到1280的數字 – nodejsj

0

嘗試使用trim()以確保沒有excesive空白:

if (trim($item->url) == trim($url)) 
1

您在每個循環取消設置$score,你會做得更好:

$myarr = $output->items; 
$score = 'N/A'; 
foreach ($myarr as $val){ 
    if ($val->url == $url) { 
     $score = round($val->score); 
    } 
}