Làm cách nào để chuyển đổi một chuỗi thành một số trong PHP?


669

Tôi muốn chuyển đổi các loại giá trị, '3', '2.34', '0.234343', vv để một số. Trong JavaScript chúng ta có thể sử dụng Number(), nhưng có phương thức tương tự nào có sẵn trong PHP không?

Input             Output
'2'               2
'2.34'            2.34
'0.3454545'       0.3454545

62
Độc giả hãy cẩn thận: không có câu trả lời thực sự cho câu hỏi này :(
Matthieu Napoli

@MatthieuNapoli Câu trả lời là Php thường tìm ra nó cho bạn - một trong những đặc quyền của hệ thống loại động.
Hẻm núi Kolob

12
Với tất cả các chuỗi không chắc chắn và 'thường'.
người27

2
@MatthieuNapoli Làm thế nào để đúc không phải là "câu trả lời thực sự"? Bạn thậm chí có thể kiểm tra loại sau khi bạn đánh máy nếu bạn muốn trở thành em bé về nó
Kolob Canyon

3
@MatthieuNapoli Tôi rất vui vì bạn đã làm rõ quan điểm của mình có nghĩa là có nhiều hơn một cách để lột da một con mèo, thay vì không có cách nào để làm điều này. Đúc rất quan trọng trong các hoạt động cơ sở dữ liệu, ví dụ. Ví dụ: trên một truy vấn PDO được tham số hóa, đôi khi sẽ có một cuộc đấu tranh để trình phân tích cú pháp nhận ra đó là một số và không phải là một chuỗi, và sau đó bạn kết thúc bằng 0 trong trường số nguyên vì bạn không truyền chuỗi thành int trong bước tham số.
stubsthewizard

Câu trả lời:


1029

Bạn thường không cần phải làm điều này, vì PHP sẽ ép buộc kiểu cho bạn trong hầu hết các trường hợp. Đối với các tình huống mà bạn muốn chuyển đổi rõ ràng loại, hãy bỏ nó:

$num = "3.14";
$int = (int)$num;
$float = (float)$num;

4
Ở đây, tình hình hơi khác một chút. Tôi muốn chuyển đổi bất kỳ chuỗi nào (chỉ chứa các số) thành một số chung. Như U có thể biết trong javaScript, chúng ta có thể sử dụng parseInt () để chuyển đổi chuỗi => int hoặc parseFloat () để chuyển đổi chuỗi => float. nhưng nói chung javaScript sử dụng Number () để chuyển đổi chuỗi => số. Tôi muốn một phương thức tương tự trong php?
Sara

4
Nó rất hữu ích cho tôi khi tôi có số tháng thu được từ chuỗi ngày đầy đủ, tôi đã sử dụng để kéo một giá trị từ một mảng tên moth. Tự động truyền không xảy ra ở đây vì các chỉ mục chuỗi là hợp lệ, nhưng không tương đương.
Cazuma Nii Cavalcanti

19
Tùy thuộc vào ngữ cảnh, có thể không an toàn khi cho rằng đó .là dấu phân cách dấu thập phân. vi.wikipedia.org/wiki/ Kẻ
Dave Jarvis

3
@Sara: Bạn cũng có thể tạo một hàm để chuyển đổi chuỗi thành số bằng cách trước tiên chuyển nó thành số nguyên, sau đó để nổi và sau đó so sánh nếu cả hai giá trị (số nguyên và số float) bằng nhau. Nếu có, bạn nên trả về giá trị dưới dạng số nguyên, nếu không, thì dưới dạng float. Hy vọng bạn có được ý tưởng.
Youstay Igo

2
Có những lúc bạn cần truyền số nguyên vào hệ thống tệp, không nên chờ PHP thực hiện chuyển đổi cho bạn.
AaA

173

Có một số cách để làm như vậy:

  1. Truyền chuỗi thành các kiểu dữ liệu nguyên thủy số:

    $num = (int) "10";
    $num = (double) "10.12"; // same as (float) "10.12";
  2. Thực hiện các phép toán trên chuỗi:

    $num = "10" + 1;
    $num = floor("10.1");
  3. Sử dụng intval()hoặc floatval():

    $num = intval("10");
    $num = floatval("10.1");
  4. Sử dụng settype().


9
Lưu ý rằng đó (double)chỉ là một bí danh cho (float).
lừa dối

4
@downvoter, tôi không biết câu trả lời của tôi có gì sai. Lưu ý rằng tôi đã đăng bài này trước khi OP chỉnh sửa câu hỏi của cô ấy, tuy nhiên điều này cũng bao gồm cả câu hỏi được chỉnh sửa ( $num = "10" + 1ví dụ).
fardjad

2
@ ed-ta: khá chắc chắn rằng nó sẽ trả về giá trị tối thiểu / tối đa thay vì 0 nếu bạn truyền chuỗi cho nó. Tức intval("9999999999")==2147483647.
RIV

6
intvallà hữu ích vì sau đó bạn có thể sử dụng nó trong array_map('intval', $arrayOfStrings);đó bạn không thể thực hiện với việc truyền.
icc97

2
thay vì $num = "10" + 1;sử dụng tốt hơn $num = "10" * 1;vì điều đó sẽ không thay đổi giá trị (yếu tố trung tính của phép nhân), đây thực chất là một dạng giống như toNumber(..)vì loại cuối cùng sẽ được xác định bởi những gì cần thiết để chuyển đổi chuỗi "10" -> (int) 10; "10.1" -> (thả nổi) 10.1;
Holly

57

Để tránh các vấn đề cố gắng intval($var). Vài ví dụ:

<?php
echo intval(42);                      // 42
echo intval(4.2);                     // 4
echo intval('42');                    // 42
echo intval('+42');                   // 42
echo intval('-42');                   // -42
echo intval(042);                     // 34 (octal as starts with zero)
echo intval('042');                   // 42
echo intval(1e10);                    // 1410065408
echo intval('1e10');                  // 1
echo intval(0x1A);                    // 26 (hex as starts with 0x)
echo intval(42000000);                // 42000000
echo intval(420000000000000000000);   // 0
echo intval('420000000000000000000'); // 2147483647
echo intval(42, 8);                   // 42
echo intval('42', 8);                 // 34
echo intval(array());                 // 0
echo intval(array('foo', 'bar'));     // 1
?>

4
IMHO, Đây là câu trả lời đúng duy nhất bởi vì đây là câu trả lời duy nhất đưa cơ số của chuỗi số vào xem xét. Tất cả các phản hồi (ngay cả những phản hồi gợi ý hàm do người dùng xác định) chỉ sử dụng kiểu truyền sẽ không thành công nếu chuỗi số có một hoặc nhiều số 0 đứng đầu và chuỗi KHÔNG được dự định là số có cơ sở bát phân.
Cú pháp Junkie

Bất cứ ý tưởng nào nếu tôi muốn chuyển đổi "12.7896" thành 12.7896?
Agnes Palit

sử dụng floatval () để chuyển đổi một chuỗi thành float. floatval ("12.7896") sẽ trở lại 12.7896
gopeca

Tại sao đây không phải là câu trả lời được chấp nhận? Là một người ngoài PHP, tôi đã biết rằng nó (int)$my_strsẽ không hoạt động vì tôi đã xử lý cụ thể các chuỗi thích 01013tôi muốn hiểu là cơ sở 10 ... Vì vậy, tôi muốn có một cách rõ ràng để cung cấp cơ sở.
Giacomo Alzetta

48

Trong bất kỳ ngôn ngữ nào (gõ lỏng lẻo), bạn luôn có thể truyền một chuỗi thành một số bằng cách thêm số 0 vào nó.

Tuy nhiên, có rất ít ý nghĩa trong việc này vì PHP sẽ tự động thực hiện tại thời điểm sử dụng biến này và dù sao nó cũng sẽ được chuyển thành một chuỗi tại thời điểm đầu ra.

Lưu ý rằng bạn có thể muốn giữ các số chấm dưới dạng chuỗi, vì sau khi truyền để nổi, nó có thể bị thay đổi một cách khó lường, do tính chất của số float.


35
Có nhiều ngôn ngữ mà bạn không thể truyền một chuỗi thành số bằng cách thêm số 0, nó thường được coi là một lỗi thay vì một phương thức truyền hợp lệ :).
Jan čpaček

4
honzasp là đúng, ví dụ trong JavaScript typeof('123'+0)đưa ra 'string', bởi vì '123'+0cho '1230'.
Oriol

5
Lưu ý, trong PHP được khuyến nghị là hầu hết thời gian bạn sử dụng so sánh kiểu ===. Vì vậy, nếu bạn sẽ so sánh dữ liệu của mình, nó có thể rất quan trọng loại dữ liệu được lưu trữ trong.
Jonathon

Lưu ý rằng bằng cách thêm số 0, bạn không 'đúc' theo nghĩa thực, về cơ bản bạn đang chuyển đổi.
CSᵠ

12
@oriol trong javascript bạn cần thêm số về 0 0+'123'để có được123
Timo Huovinen

24

Bạn có thể dùng:

(int)(your value);

Hoặc bạn có thể sử dụng:

intval(string)

Nếu số đã nhập là '2.3456' thì làm sao tôi nhận được 2.3456?
Sara

6
câu hỏi cũng là về phao.
taseenb

Chỉ cho tôi 1 dòng từ OP nơi nó nói float? trước khi bình luận và bỏ phiếu, hãy nhìn vào Bài gốc.
noobie-php

2
Ví dụ hiển thị số float, nó đang hỏi cách chuyển đổi chuỗi số thành giá trị số (số float và số nguyên)
taseenb

Trước tiên, hãy kiểm tra xem số đó có phải là số float hay không is_float, và nếu số đó vượt qua thì chuyển sang (float)thay vì (int).
Martin van Driel

24

Nếu bạn muốn có một float cho $value = '0.4', nhưng int for $value = '4', bạn có thể viết:

$number = ($value == (int) $value) ? (int) $value : (float) $value;

Nó là một chút bẩn, nhưng nó hoạt động.


3
Có thể ít bẩn hơn? strpos($val, '.') === false ? intval($val) : floatval($val);
jchook

4
@jchook Có thể bẩn hơn vì phụ thuộc vào địa phương - ví dụ: '0,4' thay vì '0,4'.
Nick Rice

Điểm tốt. Tôi cho rằng bạn có thể sử dụng localeconv()['decimal_point']thay vì '.'. Một lợi thế của strposgiải pháp là nó nhanh gần gấp đôi so với đúc hai lần.
jchook

2
@jchook phá vỡ các trường hợp như 2.1e2, nó có dấu thập phân, nhưng số kết quả là số nguyên
Tomáš Blatný

1
Chỉ cần sử dụng +toán tử nhận dạng : var_dump(+'0.4', +'4'), cung cấp cho bạn một float và int. php.net/manual/en/language.operators.arithmetic.php
tvanc

15

Bạn luôn có thể thêm số không vào nó!

Input             Output
'2' + 0           2 (int)
'2.34' + 0        2.34 (float)
'0.3454545' + 0   0.3454545 (float)

Tôi đã nhận được lỗi này A non well formed numeric value encountered. bất kỳ ý tưởng?
Agnes Palit

15

Thay vì phải chọn chuyển đổi stringthành inthoặc float, bạn chỉ cần thêm một 0vào nó và PHP sẽ tự động chuyển đổi kết quả thành một loại số.

// Being sure the string is actually a number
if (is_numeric($string))
    $number = $string + 0;
else // Let the number be 0 if the string is not a number
    $number = 0;

13

Trong PHP bạn có thể sử dụng các intval(string) or floatval(string)hàm để chuyển đổi chuỗi thành số.


4
không tôi muốn một phương pháp chung có nghĩa là nếu '5' => nó sẽ chuyển đổi thành 5 và nếu '2.345' => thì nó sẽ chuyển đổi thành 2.345.
Sara

13

Vâng, có một phương thức tương tự trong PHP, nhưng nó ít được biết đến mà bạn sẽ hiếm khi nghe về nó. Nó là một toán tử số học gọi là " danh tính ", như được mô tả ở đây:

Toán tử số học

Để chuyển đổi một chuỗi số thành một số, hãy làm như sau:

$a = +$a;

Cảnh báo: đã phát hiện hack.
Greg

Xin chào @Greg. Bạn đã nhấp vào liên kết được đăng ở đây? Đây là những gì các nhà phát triển nói về toán tử này: Chuyển đổi $ a thành int hoặc float khi thích hợp. "Chuyển đổi", ở đây, không thể được hiểu là chuyển đổi từ số sang số. Tại sao? Bởi vì từ quan điểm số học độc quyền, toán tử này hoàn toàn vô dụng! Nhân bất kỳ số nào với "+1" (tương đương với chức năng nhận dạng) hoàn toàn không ảnh hưởng đến nó. Do đó, tôi không thể tưởng tượng tiện ích khác cho toán tử này ngoài chuyển đổi loại được đề xuất ở đây.
aldemarcalazans

@ Greg - chắc chắn đây là ít của một hack, hơn hầu hết các câu trả lời khác. Đây là một toán tử tích hợp, thực hiện chính xác những gì được yêu cầu. (Mặc dù có thể tốt nhất để kiểm tra lần đầu tiên is_numeric, vì vậy hãy đặt một nơi để đặt mã để xử lý các chuỗi không thể chuyển đổi chính xác.)
ToolmakerSteve

Tôi hiểu rằng nó hoạt động hoàn hảo để sử dụng một toán tử số học để truyền, nhưng nó thực sự rất dễ bỏ lỡ. Tôi nghĩ rằng nó đáng để cảnh báo.
Greg

11

Chỉ cần một lưu ý nhỏ cho các câu trả lời có thể hữu ích và an toàn hơn trong một số trường hợp. Bạn có thể muốn kiểm tra xem chuỗi có thực sự chứa giá trị số hợp lệ trước không và sau đó chỉ chuyển đổi nó thành loại số (ví dụ: nếu bạn phải thao tác dữ liệu đến từ db chuyển đổi ints thành chuỗi). Bạn có thể sử dụng is_numeric()và sau đó floatval():

$a = "whatever"; // any variable

if (is_numeric($a)) 
    var_dump(floatval($a)); // type is float
else 
    var_dump($a); // any type

9

Đây là chức năng đạt được những gì bạn đang tìm kiếm. Đầu tiên chúng ta kiểm tra xem giá trị có thể được hiểu là một số không, nếu vậy chúng ta biến nó thành một số nguyên và một số float. Nếu int và float giống nhau (ví dụ: 5 == 5.0) thì chúng ta trả về giá trị int. Nếu int và float không giống nhau (ví dụ: 5! = 5.3) thì chúng tôi giả sử bạn cần độ chính xác của float và trả về giá trị đó. Nếu giá trị không phải là số, chúng tôi sẽ đưa ra cảnh báo và trả về null.

function toNumber($val) {
    if (is_numeric($val)) {
        $int = (int)$val;
        $float = (float)$val;

        $val = ($int == $float) ? $int : $float;
        return $val;
    } else {
        trigger_error("Cannot cast $val to a number", E_USER_WARNING);
        return null;
    }
}

6

Tôi đã thấy rằng trong JavaScript, một cách đơn giản để chuyển đổi một chuỗi thành một số là nhân nó với 1. Nó giải quyết vấn đề nối, bởi vì biểu tượng "+" có nhiều cách sử dụng trong JavaScript, trong khi biểu tượng "*" hoàn toàn là cho phép nhân toán học.

Dựa trên những gì tôi thấy ở đây về PHP tự động sẵn sàng diễn giải một chuỗi chứa chữ số là một số (và các ý kiến ​​về việc thêm, vì trong PHP, "+" hoàn toàn là để thêm vào toán học), thủ thuật nhân này hoạt động tốt cho PHP, cũng có.

Tôi đã thử nó và nó hoạt động ... Mặc dù tùy thuộc vào cách bạn có được chuỗi, bạn có thể muốn áp dụng hàm trim () cho chuỗi đó, trước khi nhân với 1.


6

Đây là một chức năng tôi đã viết để đơn giản hóa mọi thứ cho chính mình:

Nó cũng trả về các phiên bản tốc ký của boolean, số nguyên, gấp đôi và thực.

function type($mixed, $parseNumeric = false)
{        
    if ($parseNumeric && is_numeric($mixed)) {
        //Set type to relevant numeric format
        $mixed += 0;
    }
    $t = gettype($mixed);
    switch($t) {
        case 'boolean': return 'bool'; //shorthand
        case 'integer': return 'int';  //shorthand
        case 'double': case 'real': return 'float'; //equivalent for all intents and purposes
        default: return $t;
    }
}

Kiểu gọi với parseNumeric được đặt thành true sẽ chuyển đổi các chuỗi số trước khi kiểm tra loại.

Như vậy:

loại ("5", đúng) sẽ trả về int

loại ("3.7", đúng) sẽ trả về float

loại ("500") sẽ trả về chuỗi

Hãy cẩn thận vì đây là một loại phương pháp kiểm tra sai và biến thực tế của bạn vẫn sẽ là một chuỗi. Bạn sẽ cần phải chuyển đổi biến thực tế thành đúng loại nếu cần. Tôi chỉ cần nó để kiểm tra xem cơ sở dữ liệu có nên tải id hoặc bí danh hay không, do đó không có bất kỳ hiệu ứng bất ngờ nào vì dù sao nó cũng sẽ được phân tích cú pháp dưới dạng chuỗi.

Biên tập

Nếu bạn muốn phát hiện nếu các đối tượng là các chức năng, hãy thêm trường hợp này vào công tắc:

case 'object': return is_callable($mixed)?'function':'object';

6

Ngoài câu trả lời của Boykodev, tôi đề nghị điều này:

Input             Output
'2' * 1           2 (int)
'2.34' * 1        2.34 (float)
'0.3454545' * 1   0.3454545 (float)

Sau khi suy nghĩ về điều này một chút, tôi cũng có thể đề nghị chia cho 1 :)
Boykodev

1
Đó là một điểm! :) Bằng cách này, giải pháp của bạn tốt hơn nhiều so với tất cả các ký hiệu khoa học ở trên. Cảm ơn bạn.
ma túy

giải pháp này đã giải quyết vấn đề của tôi. Trong trường hợp của tôi, $id_cron = (string)date('YmdHi'); $target_id_cron = $id_cron - 1;thay vì $ target_id_cron = (int) $ id_cron - 1;
inMILD

1
Tôi đã gặp lỗi này A non well formed numeric value encounteredkhi tôi muốn thay đổi chuỗi thành float $num = '12,24' * 1. Bất cứ đề nghị nào?
Agnes Palit

5
$a = "10";

$b = (int)$a;

Bạn có thể sử dụng điều này để chuyển đổi một chuỗi thành một int trong PHP .


2
nếu số đã nhập là '7.2345' thì tôi không thể sử dụng (int) thì tôi phải sử dụng (float). Những gì tôi cần là một giải pháp chung.
Sara

1
Bạn luôn có thể sử dụng gấp đôi hoặc nổi.
Pritom

5

Đơn giản là bạn có thể viết như thế này:

<?php
    $data = ["1","2","3","4","5"];
    echo json_encode($data, JSON_NUMERIC_CHECK);
?>

3
Mặc dù mã này có thể trả lời câu hỏi, cung cấp ngữ cảnh bổ sung về lý do và / hoặc cách mã này trả lời câu hỏi cải thiện giá trị lâu dài của nó.
Alex Riabov

1
Bạn có chắc về điều này? Điều này sẽ không chuyển đổi một chuỗi thành một số, nhưng một mảng thành một chuỗi JSON
Nico Haase

Có, @NicoHaase nếu số ở định dạng chuỗi trong một mảng, nó sẽ chuyển đổi thành số.
Đaminh Amal Joe F

5

Chỉ nhân số đó với 1 để chuỗi được chuyển đổi thành số loại.

//String value
$string = "5.1"
if(is_numeric($string)){
  $numeric_string = $string*1;
}

Đủ công bằng, nhưng phương pháp này (và các thủ thuật tương tự) đã được liệt kê trong 24 câu trả lời khác cho câu hỏi này - Tôi không thấy giá trị khi đăng lại.
DavidW

4

Bạn có thể dùng:

((int) $var)   ( but in big number it return 2147483647 :-) )

Nhưng giải pháp tốt nhất là sử dụng:

if (is_numeric($var))
    $var = (isset($var)) ? $var : 0;
else
    $var = 0;

Hoặc là

if (is_numeric($var))
    $var = (trim($var) == '') ? 0 : $var;
else
    $var = 0;

2

Bạn có thể thay đổi kiểu dữ liệu như sau

$number = "1.234";

echo gettype ($number) . "\n"; //Returns string

settype($number , "float");

echo gettype ($number) . "\n"; //Returns float

Vì lý do lịch sử, "nhân đôi" được trả lại trong trường hợp thả nổi.

Tài liệu PHP


2

Tất cả các đề xuất mất loại số.

Đây dường như là một cách thực hành tốt nhất:

function str2num($s){
// Returns a num or FALSE
    $return_value =  !is_numeric($s) ? false :               (intval($s)==floatval($s)) ? intval($s) :floatval($s);
    print "\nret=$return_value type=".gettype($return_value)."\n";
}

1

PHP sẽ làm điều đó cho bạn trong giới hạn

<?php
   $str = "3.148";
   $num = $str;

   printf("%f\n", $num);
?>

Tôi không muốn ra ngoài đặt nó. Tôi muốn chuyển đổi nó và lưu nó trong một biến.
Sara

1
Điều này tự động chuyển đổi nó để nổi. Chuyển đổi loại lỏng lẻo của PHP làm điều đó cho bạn. Mặc dù nó có thể không làm những gì bạn mong đợi vì vậy các câu trả lời khác với chuyển đổi rõ ràng có thể hoạt động tốt hơn cho bạn.
Adrian Cornish

$ str có thể chứa '5' hoặc '5.258' bằng cách sử dụng printf ("% f \ n", $ str) '5' sẽ được đặt là 5,000000 (tôi muốn nó là 5) cho 5.280000 (tôi muốn nó là 5.28) nhiều điểm thập phân hơn.
Sara

1

Có một cách:

$value = json_decode(json_encode($value, JSON_NUMERIC_CHECK|JSON_PRESERVE_ZERO_FRACTION|JSON_UNESCAPED_SLASHES), true);

Sử dụng is_*sẽ không hoạt động, vì variablelà : string.

Sử dụng kết hợp json_encode()và sau đó json_decode()nó được chuyển đổi thành dạng "thật". Nếu đó là sự thật stringthì nó sẽ xuất sai.

$num = "Me";
$int = (int)$num;
$float = (float)$num;

var_dump($num, $int, $float);

Sẽ xuất: string(2) "Me" int(0) float(0)


0

Tôi nhận được câu hỏi "giả sử bạn đang viết hàm dựng sẵn để truyền một số nguyên thành một chuỗi trong PHP, bạn sẽ viết hàm đó như thế nào" trong một cuộc phỏng vấn lập trình. Đây là một giải pháp.

$nums = ["0","1","2","3","4","5","6","7","8","9"];
$int = 15939; 
$string = ""; 
while ($int) { 
    $string .= $nums[$int % 10]; 
    $int = (int)($int / 10); 
} 
$result = strrev($string);

0

Tôi đã đọc qua các câu trả lời và không thấy ai đề cập đến sự cảnh báo lớn nhất trong chuyển đổi số của PHP.

Câu trả lời được đánh giá cao nhất cho thấy làm như sau:

$str = "3.14"
$intstr = (int)$str // now it's a number equal to 3

Thật tuyệt vời. PHP không truyền trực tiếp. Nhưng nếu chúng ta làm như sau thì sao?

$str = "3.14is_trash"
$intstr = (int)$str

PHP có xem xét các chuyển đổi như vậy hợp lệ không?

Rõ ràng là .

PHP đọc chuỗi cho đến khi tìm thấy ký tự không phải số đầu tiên cho loại được yêu cầu. Có nghĩa là đối với số nguyên, ký tự số là [0-9]. Kết quả là, nó đọc 3, vì trong phạm vi ký tự [0-9], nó tiếp tục đọc. Đọc. và dừng ở đó vì nó không nằm trong phạm vi [0-9].

Điều tương tự sẽ xảy ra nếu bạn được chọn để nổi hoặc gấp đôi. PHP sẽ đọc 3, sau đó ., sau đó 1, sau đó 4, và sẽ dừng lại ivì nó không phải là ký tự số trôi nổi hợp lệ.

Kết quả là, "million" >= 1000000đánh giá thành sai, nhưng "1000000million" >= 1000000đánh giá thành true.

Xem thêm:

https://www.php.net/manual/en/lingu.operators.comparison.php cách chuyển đổi được thực hiện trong khi so sánh

https://www.php.net/manual/en/lingu.types.opes.php#lingu.types.opes.conversion cách các chuỗi được chuyển đổi thành số tương ứng


0

Nếu bạn không biết trước nếu bạn có dấu phẩy hoặc số nguyên
và nếu chuỗi có thể chứa các ký tự đặc biệt (như dấu cách, €, v.v.)
và nếu nó có thể chứa nhiều hơn 1 dấu chấm hoặc dấu phẩy,
bạn có thể sử dụng chức năng:

// This function strip spaces and other characters from a string and return a number.
// It works for integer and float.
// It expect decimal delimiter to be either a '.' or ','
// Note: everything after an eventual 2nd decimal delimiter will be removed.
function stringToNumber($string) {
    // return 0 if the string contains no number at all or is not a string:
    if (!is_string($string) || !preg_match('/\d/', $string)) {
        return 0;
    } 

    // Replace all ',' with '.':
    $workingString = str_replace(',', '.', $string);

    // Keep only number and '.':
    $workingString = preg_replace("/[^0-9.]+/", "", $workingString);

    // Split the integer part and the decimal part,
    // (and eventually a third part if there are more 
    //     than 1 decimal delimiter in the string):
    $explodedString = explode('.', $workingString, 3);

    if ($explodedString[0] === '') {
        // No number was present before the first decimal delimiter, 
        // so we assume it was meant to be a 0:
        $explodedString[0] = '0';
    } 

    if (sizeof($explodedString) === 1) {
        // No decimal delimiter was present in the string,
        // create a string representing an integer:
        $workingString = $explodedString[0];
    } else {
        // A decimal delimiter was present,
        // create a string representing a float:
        $workingString = $explodedString[0] . '.' .  $explodedString[1];
    }

    // Create a number from this now non-ambiguous string:
    $number = $workingString * 1;

    return $number;
}

-8

Phương pháp khác nhau:

  1. Đẩy tất cả vào một mảng / mảng kết hợp.
  2. json_encode($your_array, JSON_NUMERIC_CHECK); tùy ý giải mã nó trở lại
  3. ?
  4. Lợi nhuận!

7
Stack Overflow là về câu trả lời cho câu hỏi, không phải trò đùa. Tôi chắc chắn có một nơi ngoài đó cho điều đó, nhưng nơi này không phải là nó.
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.