2014-05-07 66 views
0

我從字面上花了6個小時試圖找出這個。我有下面的代碼:PHP爆炸()和如果語句

$pieces3 = explode(":", $value2); 
$checkiftime = $pieces3[0]; 
if ($checkiftime == 'time') 
{ 
echo "Yes!"; 
} 
else 
{ 
echo "Oh no!"; 
} 

$值2包含:

" 'time': 1376952971" 

我敢肯定的說法應該是真實的,但由於某些原因,我不斷收到假

(哦不!)

如果($ checkiftime == '時間')

出了什麼問題?我已經嘗試使用雙引號$ checkiftime ==「時間」,但仍然無濟於事。

編輯:

我試着這樣做後的Vardumps爆炸:

var_dump($pieces3); 
echo "<br>"; 
var_dump($value2); 
echo "<br>"; 
var_dump($pieces3[0]); 
echo "<br>"; 

,並導致有:

array(2) { [0]=> string(13) " 'time'" [1]=> string(11) " 1376952971" } 
string(25) " 'time': 1376952971" 
string(13) " 'time'" 

我不知道爲什麼 '時間' 顯示爲字符串(13 ),我看到這個空白空間,可能是一個包含多於一個隱藏字符串的特殊字符?我做了一個trim(),但它似乎沒有改變任何東西。

EDIT2:

謝謝大家,下面是我修改了代碼的一部分,它的偉大工作:

$checkiftime = trim($pieces3[0], " '\t\n\r\0\x0B"); 
if ($checkiftime == 'time') 
+3

'var_dump($ pieces3);' - 你能發佈結果格式化的問題嗎? – kero

+3

'var_dump($ value2);' – jcsanyi

+4

剛剛運行了您的確切代碼,使用'$ value2 =「time:1376952971」',它按預期工作。結果是'是!' –

回答

2

我猜主要的問題是$value2包含意外的值。

它看起來像你需要清理字符串,刪除任何可能阻礙你的支票(如空格和撇號/單引號)的字符。試試這個......

$checkiftime = trim($pieces3[0], " '\t\n\r\0\x0B"); 

查看trim()。這裏演示 - http://ideone.com/uVEDXM

或者,你可以簡單地使用正則表達式匹配檢查整個字符串,如

if (preg_match('/^\W*time\W*: (\d+)$/', $value2, $matches)) { 
    echo 'Yes!', PHP_EOL; 
    var_dump($matches); // $matches[1] contains the numeric value 1376952971 
} 

演示 - http://ideone.com/025vAV

+0

感謝菲爾。那隻會消除'在時間之前不會呢? '時間過後'怎麼樣?在'時間'這個詞之前還有一個普通的空格嗎?我問,因爲它顯示爲字符串(13)時,它只包含7個字符,所以我想空白空間由6個字符組成。 – user3613603

+0

@ user3613603閱讀'trim()'的手冊,它將刪除前導字符和尾隨字符。儘管您粘貼到您的問題中的信息只包含正常的空格字符,但您對字符串的長度比預期的要長是正確的。我已經更新了我的答案,以便更全面 – Phil

+0

嗨菲爾,$ checkiftime = trim($ pieces3 [0],「't \ n \ r \ 0 \ x0B」);訣竅。所以Ibelieve認爲空白是一個特殊的字符?可能計數超過1個字符?這聽起來很奇怪,但你的代碼工作,所以這是我能想到的唯一解釋 – user3613603

-1

你的時間價值周圍有單引號,內字符串。所以,你需要讓你的比較:

$checkiftime = trim($checkiftime, " \t\n\r\0\x0B"); 
if ($checkiftime == "'time'") { 
... 
} 

這可能是在問一個問題吧:)

,如果你願意,你可以刪除單引號之前檢查你的價值觀一個很好的教訓:

$checkiftime = str_replace("'", "", $checkiftime); 
+0

還有一些空白字符,雖然它似乎不僅僅是ASCII空間 – Phil

+0

@Phil trim()是 – Cully

+0

這不適用於我。我應該發佈整個代碼,但它包含敏感信息,所以我可能需要修改它。我試過修剪,結果是一樣的。 – user3613603

0

我不知道爲什麼你在你的「時間」爲什麼你保持它周圍的單引號一個空格開頭,但這裏是會產生肯定的代碼基礎上如何它看起來像你設置它: http://codepad.org/T8yw8Ou5

考慮在這種情況下使用JSON!

+0

Hi Ramsey,這實際上是JSON日誌文件中的一段數據。我只是用explode()去掉了''時間':215416541654「,並將該unix時間戳轉換爲日期格式 – user3613603

0
$value2 = " 'time': 1376952971"; 

if(stristr($value2 ,'time') === FALSE) 
{ 
    echo "Oh no!"; 
} 
else 
{ 
    echo "Yes!"; 
} 

以上檢查字符串time是否存在於$value2中。但是,如果你需要的時候,你可以:

echo (stristr($value2 ,"'time':") === FALSE 
     ? '' 
     : trim(str_replace("'time':" ,'' ,$value2)) 
    ); 
+0

這看起來很有趣,糾正我,如果我錯了,但這會檢查單詞」時間「是否可以在$ value2字符串中找到? – user3613603

+0

當然,它會在'$ value2'中發現字符串'time'的第一次出現。 [stristr](http://www.php.net/manual/en/function.stristr.php)。 – Uours

+0

太棒了!感謝很多 – user3613603

0

這似乎是一些JSON數據的一部分,但它是畸形的,它使用單引號字符串(這是在JavaScript中有效,但不是有效的JSON) 。如果我們粗略地用雙引號替換單引號,並將其包裝在{}中以使其成爲完整對象,那麼使用json_decode()可以輕鬆解析此字符串,這將處理格式和空格字符的變化,這些字符與explode() :

$value = " 'time': 1376952971"; 
$value = json_decode('{' . strtr($value, "'", '"') . '}'); 
echo $value->time; 
// Outputs: 1376952971 
+0

其實它是一個JSON文件。我只是將雙引號替換爲它的一部分 – user3613603

+0

這實際上很有趣,但有一個問題。如果你給了這個JSON字符串: – user3613603

+0

這實際上很有趣,但有一個問題。如果你給這個JSON字符串: ' 「Team_Items」:{ 「軍」:{ 「聖騎士」:{ 「325648」:0, 「546545」:4 }, 「騎士」 :{ 「325648」: - 2, 「546545」:0 }} } ' 你能使用json_decode,讓這些項目和值及其子項和值,並打印出來? – user3613603