簡體   English   中英

在 javascripts 和 php 中連接數字

[英]Concatenating numbers in javascripts and php

我將一些代碼從 javascript 翻譯成 php,我的問題是數字,因為在 javascript 中,“+”用於加法和連接兩種情況。 前任:

1+1+ "2" +"4"+3 - 5 -1+"" + 2 

在 javascript 結果是 22372

我怎樣才能在 php 中做到這一點? 我嘗試使用 preg_replace

1+1 --> 2
2+"2" --> "22" // as string
""+2 --> "2" 

問題在這里:

(1+1+ "2" +"4"+3 - 5 -1)+""+2

我需要解決 () 然后連接 "" 和 2

字符串連接是用“.”完成的。 而不是 php 中的“+”。 您仍然可以連接不同類型的值,例如

$apple_count = 25;
$my_string = "I want " . $apple_count . " apples.";

我正在研究解決方案

echo $a." = 22372"."\n";
function concat_num($a) {
 while (preg_match("/\"(\d+)\"\s*\+\s*(\d+)/",$a) || preg_match("/^(?!\-)\s*(\d+)\s*\+\s*\"(\d+)\"/",$a)) { // "10" + 2 or 2 + "10"
 while (preg_match("/(\d+)\s*\+\s*(\d+)/",$a)) {    //1 + 2 --> 3
  $a=preg_replace_callback(
    "/(\d+)\s*\+\s*(\d+)/",
    function ($m) {
      return floor($m[1]+$m[2]);
    },
    $a
    );
 }
 echo $a."\n";
 while (preg_match("/\"\"\s*\+\s*(\d+)/",$a)) {
  $a=preg_replace("/\"\"\s*\+\s*(\d+)/",'"'."\$1".'"',$a);  // ""+11   ---> "11"
 }
 echo $a."\n";
 while (preg_match("/(\d+)\s*\+\s*\"\"/",$a)) {
  $a=preg_replace("/(\d+)\s*\+\s*\"\"/",'"'."\$1".'"',$a);  // 11+""   ---> "11"
 }
 echo $a."\n";
 while (preg_match("/\"(\d+)\"\s*\+\s*\"\"/",$a)) {
  $a=preg_replace("/\"(\d+)\"\s*\+\s*\"\"/",'"'."\$1".'"',$a); // "11"+"" --> "11"
 }
 echo $a."\n";
 while (preg_match("/\"\"\s*\+\s*\"(\d+)\"/",$a)) {
  $a=preg_replace("/\"\"\s*\+\s*\"(\d+)\"/",'"'."\$1".'"',$a);  // ""+"22" -->"22"
 }
 echo $a."\n";
 while (preg_match("/\"(\d+)\"\s*\+\s*\"(\d+)\"/",$a)) {
  $a=preg_replace("/\"(\d+)\"\s*\+\s*\"(\d+)\"/",'"'."\$1\$2".'"',$a); // "11"+"22" --> "1122"
 }
 echo $a."\n";
 while (preg_match("/\"(\d+)\"\s*\+\s*(\d+)/",$a)) {
  $a=preg_replace("/\"(\d+)\"\s*\+\s*(\d+)/",'"'."\$1\$2".'"',$a); // "11"+22 -->> "1122"
 }
 echo $a."\n";
 while (preg_match("/^(?!\-)\s*(\d+)\s*\+\s*\"(\d+)\"/",$a,$m)) {
 $a=preg_replace("/^(?!\-)\s*(\d+)\s*\+\s*\"(\d+)\"/",'"'."\$1\$2".'"',$a); // 11+"22" --->> "1122"
 }
 echo $a."\n";
 while (preg_match("/\"(\d+)\"\s*\-\s*(\d+)/",$a)) {  // "10" - 8 --> 2
  $a=preg_replace_callback(
    "/\"(\d+)\"\s*\-\s*(\d+)/",
    function ($m) {
      return floor($m[1]-$m[2]);
    },
    $a
  );
 }
 echo $a."\n";
 while (preg_match("/(\d+)\s*\-\s*(\d+)/",$a)) {    //5 - 2 --> 3
  $a=preg_replace_callback(
    "/(\d+)\s*\-\s*(\d+)/",
    function ($m) {
      return floor($m[1]-$m[2]);
    },
    $a
    );
 }
 echo $a."\n";
 }
 return $a;
}
echo $b=concat_num($a)."\n";
$code="\$d=".$b.";";
eval ($code);
echo $d."\n";

結果

1+1+ "2" +"4"+3 - 5 -1+"" + 2 = 22372
2+ "2" +"4"+3 - 5 -1+"" + 2
2+ "2" +"4"+3 - 5 -1+"2"
2+ "2" +"4"+3 - 5 -1+"2"
2+ "2" +"4"+3 - 5 -1+"2"
2+ "2" +"4"+3 - 5 -1+"2"
2+ "24"+3 - 5 -1+"2"
2+ "243" - 5 -1+"2"
"2243" - 5 -1+"2"
2238 -1+"2"
2237+"2"
2237+"2"
2237+"2"
2237+"2"
2237+"2"
2237+"2"
2237+"2"
2237+"2"
"22372"
"22372"
"22372"
"22372"
22372

這似乎有效,但最好的解決方案是從頭到尾評估字符串。

1+1 --> 2 (num)
2+"2" --> "22" (string)
"22"+"4" --> "224" (string)
"224"+3 --> "2243" (string)
2243-5 --> 2238 (num)
2238-1 --> 2237 (num)
2237+"" --> "2237" (string)
"2237"+"2" --> "22372" (string)

暫無
暫無

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

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