dxw / php-missing

PHP希望拥有的stdlib

v2.0.0 2023-07-19 13:38 UTC

README

PHP的标准库包含很多东西,但缺少很多东西。所有这些函数都是我不得不反复实现的基本功能。

安装

安装 composer

在项目的根目录中运行以下命令

composer require dxw/php-missing

或者,创建一个包含以下内容的 composer.json 文件并运行 "composer install"

{
  "require": {
    "dxw/php-missing": "^2.0"
  }
}

API

数组

$array = \Missing\Arrays::flatten($array)

将包含数组的数组扁平化。

\Missing\Arrays::flatten([1, [2, 3, [4, 5]]]) === [1, 2, 3, 4, 5]

$array = \Missing\Arrays::sortBy($array, $callback)

根据 $callback($array_element) 对 $array 进行排序。

\Missing\Arrays::sortBy(['abc', 'ab', 'a'], function ($a) {return strlen($a);}) === ['a', 'ab', 'abc']

日期

list($timestamp, $err) = \Missing\Dates::parse($str)

解析几个常见/标准的时间格式,返回一个包含UNIX时间戳或错误的 Dxw\Result\Result 对象。

$result = \Missing\Dates::parse(get_post_meta($post->ID, '_EventStartDate', true));
if ($result->isErr()) {
  $date = 'Unknown date';
} else {
  $date = strftime('%e %B %Y', $result->unwrap());
}

以下日期格式被解析

  • %Y-%m-%dT%H:%M:%S
  • %Y-%m-%d %H:%M:%S
  • %Y-%m-%dT%H:%M
  • %Y-%m-%d %H:%M
  • %Y-%m-%d

$date = \Missing\Dates::strftime($date_string, $format, $else, $tz)

使用 \Missing\Dates::parse() 解析 $date_string(也接受UTC时间戳),如果解析正确,则返回在时区 $tz 中使用 $format 格式的日期,否则返回 $else。

<p>Date: <?php echo \Missing\Dates::strftime($date, 'd/m/Y', 'unknown', 'Europe/London') ?></p>

整数

$string = \Missing\Ints::ordinalize($number)

返回任何给定整数的英文序数(即1 => "1st",2 => "2nd")。

直接从 active_record 的 Inflector#ordinalize(也是MIT许可)复制。

反射

$value = \Missing\Reflection::call($object, $methodName, $arguments)

使用 $arguments(一个数组)调用 $object 的私有或受保护方法 $methodName,并返回其返回值。

字符串

$bool = \Missing\Strings::startsWith($haystack, $needle)

如果字符串 $haystack 以 $needle 开头,则返回 true(使用 substr() - 不支持正则表达式)。

$bool = \Missing\Strings::endsWith($haystack, $needle)

如果字符串 $haystack 以 $needle 结尾,则返回 true(使用 substr() - 不支持正则表达式)。

$string = \Missing\Strings::getOutput($callback)

执行 $callback,返回其打印的字符串。

许可证

MIT - see COPYING.md

\Missing\Ints::ordinal 和 \Missing\Ints::ordinalize 从 Rails active_support 模块移植而来,也是MIT许可。