为什么substr()无法正确处理具有前导零的数字?

时间:2016-06-18 13:35:11

标签: php substring

我有这个脚本:

function DecryptId($id) {
    $first_digit = substr($id, 0,1);
    if ( $first_digit == 0 ) {
        return 'yes';
    } else {
        return 'no';
    }
}

$id = 014;
echo DecryptId($id);

//=> no

Demo

为什么要打印no?我希望它打印yes。因为$id的值以0开头。怎么了?

编辑:实际上我正在传递$id,如下所示:DecryptId($_POST['au']);$_POST['au']包含一个数字。像这样的东西:

23
43552
0153
314
09884

如您所见,有时该号码以0开头。我需要将其作为字符串传递。我怎么能这样做?

3 个答案:

答案 0 :(得分:4)

由于前导零,PHP将解析该数字为八进制。即使它没有这样做,大多数语言也会剥离前导零(因为它们实际上并不构成数字的一部分)。这意味着$id将评估为12

您确定不想将其声明为字符串吗? ($id = "014"

答案 1 :(得分:2)

您的功能正常运行,问题是您应该在提供字符串时传递函数中的数字。因此,如果您的变量类型为integer,则前导零最终会

您可以在函数中添加一些内容以检查变量类型并通知用户。

function DecryptId($id) {
    $type = gettype( $id );
    if($type!= "string") {
    echo "Your variable has type ".$type.". Use a 'string' type variable";
    return;
    }
    $first_digit = substr($id, 0,1);
    if ( $first_digit == 0 ) {
        return 'yes';
    } else {
        return 'no';
    }
}

$id = 014;
echo DecryptId($id);
echo "\n";
$id = '014';
echo DecryptId($id);

PHP Sandbox

中尝试上述示例

答案 2 :(得分:-1)

试试这个

import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.layout.GridPane;
import javafx.stage.Stage;

public class ComboBoxSample extends Application {
    public static void main(String[] args) {
        launch(args);
    }

    final Button button = new Button ("Send");
    final Label notification = new Label ();
    final TextField subject = new TextField("");
    final TextArea text = new TextArea ("");

    String address = " ";

    @Override public void start(Stage stage) {
        stage.setTitle("ComboBoxSample");
        Scene scene = new Scene(new Group(), 500, 270);

        final ComboBox emailComboBox = new ComboBox();
        emailComboBox.getItems().addAll(
            "jacob.smith@example.com",
            "isabella.johnson@example.com",
            "ethan.williams@example.com",
            "emma.jones@example.com",
            "michael.brown@example.com"  
        );

        final ComboBox priorityComboBox = new ComboBox();
        priorityComboBox.getItems().addAll(
            "Highest",
            "High",
            "Normal",
            "Low",
            "Lowest" 
        );   

        priorityComboBox.setValue("Normal");

        GridPane grid = new GridPane();
        grid.setVgap(4);
        grid.setHgap(10);
        grid.setPadding(new Insets(5, 5, 5, 5));
        grid.add(new Label("To: "), 0, 0);
        grid.add(emailComboBox, 1, 0);
        grid.add(new Label("Priority: "), 2, 0);
        grid.add(priorityComboBox, 3, 0);
        grid.add(new Label("Subject: "), 0, 1);
        grid.add(subject, 1, 1, 3, 1);            
        grid.add(text, 0, 2, 4, 1);
        grid.add(button, 0, 3);
        grid.add (notification, 1, 3, 3, 1);

        Group root = (Group)scene.getRoot();
        root.getChildren().add(grid);
        stage.setScene(scene);
        stage.show();
    }    
}