【问题标题】:laravel In_array() function part of string detectlaravel In_array() 函数部分的字符串检测
【发布时间】:2020-07-16 14:08:33
【问题描述】:

数组如下:

$array = ['blog.setting', 'blog.post', 'blog.delete', 'blog.edit', 'other.other'];

我想知道是否有元素有'blog.'; 或许这样就完美了。

in_array('blog.*', $array)

谁能帮帮我?

【问题讨论】:

  • 那么到目前为止,您尝试了什么?这是一项相当简单的任务,可以通过多种不同方式实现。
  • 好吧,只是在寻找最好的方法。

标签: php arrays string laravel php-7


【解决方案1】:

正如你在标签中提到的 Laravel,你可以这样做:

use Illuminate\Support\Str;
use Illuminate\Support\Collection;

$blogTest = Collection::make($array)
    ->contains(function ($elt) {
        return Str::is('blog.*', $elt);
    });

【讨论】:

  • 它应该检测到第一个词和“blog.”,既不是中间词也不是“blog”
  • ["test.setting.random.1", "test.blog.random.2"] 在这种情况下,它应该返回 false。不正确。
  • 我刚刚测试过,它返回false,你的代码有问题
【解决方案2】:

你可以用纯 PHP 做:

    $array = ['blog.setting', 'blog.post', 'blog.delete', 'blog.edit', 'other.other'];
    $string = implode(',',$array);

    if (strpos($string, 'blog') !== false) {
        dump('There is blog string inside of given array!');
        return true;
    }

【讨论】:

  • 它应该检测第一个词和“blog.”,而不是中间词或“blog”
【解决方案3】:

你需要使用正则表达式,和array_filter方法

$array = ['blog.setting', 'blog.post', 'blog.delete', 'blog.edit', 'other.other'];

$filtered = array_filter($array, function($value){
    return preg_match('/^blog\..*$/m', $value);
});

【讨论】:

  • 一个可以为此使用正则表达式,但没有需要这样做。此外,这是一个写得很糟糕的答案,更适合评论。没有解决方案,也没有解释。
  • 我以为他以后会需要这些价值观))
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-05-29
  • 2022-01-15
  • 1970-01-01
  • 2018-12-28
  • 2011-09-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多