簡體   English   中英

如何在php中將字符串轉換為布爾值

[英]How to convert string to boolean in php

我在php中定義了這個函數

function ifstatement($statement = 'if(10 > 9;1+1;2+2)') {
// $statement = str_replace(' ', '', $statement);

if (strpos($statement, 'if(') > -1) {
   $statement = rtrim(ltrim(str_replace(' ', '', $statement), 'if('), ')');
   $exp = explode(';', $statement);
  if ( $exp[0] ) {
    if (strpos($exp[1], 'if(' )> -1) {
     return ifstatement($exp[1]);
    } else {
     return 1;
   }
  } else {
  if (strpos($exp[2], 'if(')> -1) {
    return ifstatement($exp[2]);
  } else {
   return 0;
  }
 }
}else{
  echo 'out';
  }
}

問題是函數總是返回1,即使函數參數中的if語句中的條件是false,也是經過測試的

if($exp[0])

看起來$exp[0]是一個字符串,我怎么能把它作為參數進行測試

$exp[0]包含10 > 9 (無論你在第一次之前有什么; ),所以只有它為空字符串或'0'才會計算為false。 要正確評估它,您應該使用eval()函數:

$condition = '10 > 9';
$result = eval('return ' . $condition . ';');

注意:永遠不要使用eval()在生產環境中,除非你真的確定你輸入的是無害的,你不能做到這一點的另一種方式。

$exp[0] = (boolean) $exp[0];

可能是你正在尋找的東西

除非您要正確地執行此操作(使用解析器),否則最好讓用戶在多個字段中指定其條件。 一行將包含x的文本字段,比較運算符的選擇字段( ==<> ),以及y另一個文本字段。 然后他們可以指定是否匹配所有支票或任何支票。 當它們像這樣被打破時,你將能夠執行預期的邏輯,而無需使用strposeval實現一種新語言,這完全是瘋狂的。

您可以在Thunderbird的消息過濾器編輯中看到此類接口的示例:

在此輸入圖像描述

並在iTune的智能播放列表編輯中:

在此輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM