【问题标题】:Check if last character is "s" or "z"检查最后一个字符是“s”还是“z”
【发布时间】:2021-06-05 05:16:32
【问题描述】:

有没有比检查最后一个字符是“s”还是“z”更勇敢的方法:

if (substr($var, -1, 1) == "s" OR substr($var, -1, 1) == "z") ...

类似

if (substr($var, -1, 1) == "s" OR "z") ...  

会很好,但是 PHP 中有这样的东西吗?

【问题讨论】:

标签: php strstr


【解决方案1】:

使用in_array 并查找数组中的最后一个字符:

if (in_array(substr($var, -1, 1), ['s', 'z']))

【讨论】:

    【解决方案2】:

    或许:

    in_array(array_pop(explode('', $var)), ['s', 'z'])` ?
    

    可读性并不高,也不英勇,但我知道什么? :)

    【讨论】:

    • 谢谢!聪明。
    【解决方案3】:

    厌倦了太容易理解的代码?正则表达式的救援:

    preg_match('/[sz]$/', $var)
    

    【讨论】:

    • 哈哈不错。好吧,编程不是我的工作,所以我不知道什么是最先进的。你宁愿选择我原来的解决方案,因为它更具可读性吗?
    • 我主要是一名 C++ 程序员,所以我认为“这很聪明”是一种诅咒。清晰和可读性胜过聪明。如果你知道正则表达式,这个就比较清楚了,[] 是“one of”,$ 是“end of string”,如果你不会,我不推荐。
    • 我有,但我认为正则表达式会有点过度设计而且速度也较慢,因为正则表达式通常需要更长的时间,对吧?
    【解决方案4】:

    如果你能够使用 PHP8,那么你应该在 PHP8 中提供这个简单的解决方案。

    https://www.php.net/manual/en/function.str-ends-with.php

    <?php
    $text = 'foods';
    if (str_ends_with($text, 's') || str_ends_with($text, 'z')) { ... }
    

    【讨论】:

    • 虽然一样长 :) 但谢谢,不知道这个功能。
    猜你喜欢
    • 2020-01-27
    • 2015-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-15
    • 2013-01-06
    • 1970-01-01
    • 2022-06-17
    相关资源
    最近更新 更多