【问题标题】:I need to check if certain number is in string of numbers我需要检查某个数字是否在数字字符串中
【发布时间】:2018-11-02 17:19:32
【问题描述】:

我真的需要一些帮助......我只是无法让它工作。

现在我有这段代码,它工作正常。 它的作用是...根据名称中的日期重新调整目录中的所有文件。

<?php
header('Access-Control-Allow-Origin: *');
$imagesDir = '';
$images = glob($imagesDir . '*.{jpg,jpeg,png,gif}', GLOB_BRACE);

$filteredImages = [];
foreach($images as $image) {
    $current_date = date("Ymd");
    $file_date = substr($image, 0, 8);
    if (strcmp($current_date, $file_date)>=0)
        $filteredImages[] = $image;
}
echo json_encode($filteredImages, JSON_UNESCAPED_UNICODE);
?>

但现在我需要过滤这些文件(甚至可能在执行此代码之前)。根据他们名字中的字符串。

文件以下列方式命名:

yyyymmdd_xxxxxxx-xxxxxx~yyyymmdd.123456789.jpg
yyyymmdd_xxxxxxx-xxxxxx~yyyymmdd.9.jpg
yyyymmdd_xxxxxxx-xxxxxx~yyyymmdd.458.jpg

我只需要过滤掉最后(在"."".jpg" 之间)的那串数字中具有特定数字的那些,例如。号码9

$number = 9

我正在尝试使用这段代码来仅分隔名称的最后一部分:

<?php
function getBetween($jpgname,$start,$end){
    $r = explode($start, $jpgname);
    if (isset($r[1])){
        $r = explode($end, $r[1]);
        return $r[0];
    }
    return '';
}

$jpgname = "yyyymmdd_xxxxxxx-xxxxxx~yyyymmdd.12789.jpg";
$start = ".";
$end = ".jpg";
$output = getBetween($jpgname,$start,$end);
echo $output;
?>

我想我在所有这些中都需要 STRIPOS……但我现在迷路了……:(

【问题讨论】:

  • 我看到你编辑了你的代码。是您想要的单个数字的文件名还是具有特定名称的文件名,恰好是一个数字?

标签: php regex explode stripos


【解决方案1】:

你或许可以使用 preg_grep。
这是数组的正则表达式。

这是未经测试的,但我认为它应该可以工作。

header('Access-Control-Allow-Origin: *');
$imagesDir = '';
$images = glob($imagesDir . '*.{jpg,jpeg,png,gif}', GLOB_BRACE);

$find = 9;
$filtered = preg_grep("/.*?\.\d*" . $find . "\d*\./", $images);

正则表达式将查找点的任何内容,然后是任何数字或没有数字,$find 然后是任何或没有数字,然后再次是一个点。

【讨论】:

  • 假设我有 $number = 9 如何在该过滤部分设置 $number?
  • 这就是你要找的,一个特定的数字。所以你想要一个你设置的变量$find,并且你只想得到文件名匹配?还是你也想要“19”?
  • 它总是只有一位数字。
  • uff.. 我不知道如何在这里发布代码... :( 我得到空回声
  • 好的...这仅适用于最后一个数字,如果有更多数字则失败:(
【解决方案2】:

这是你需要的吗?它会给你123456789

$string = "yyyymmdd_xxxxxxx-xxxxxx~yyyymmdd.123456789.jpg";

$explode = explode(".", $string);

echo ($explode[1]);

编辑 -

根据您的要求,Andreas 的解决方案似乎有效。

这是我尝试过的,我更改了查找变量并检查了。

$images = array("yyyymmdd_xxxxxxx-xxxxxx~yyyymmdd.12789.jpg");

$find = 32;
$filtered = preg_grep("/.*?." . $find . "./", $images);

print_r($filtered);

【讨论】:

  • 我已经用我的代码重新调整了这一步(虽然这看起来更优雅:))但我不知道如何进一步进行过滤。
  • 什么条件决定了你需要和不需要哪个文件路径?是这样的特定数量吗?
  • 我的代码的第一部分按日期过滤文件并且工作正常。现在我需要进一步过滤......我被困在那里。假设我有 $number = 9 我需要最后一部分中所有编号为 9 的文件
  • 所以如果你在中间得到一个像 552 这样的字符串。现在,如果您的号码是 2 或 52 或 552 那么这是有效的吗?我说的对吗?
  • 我将始终只搜索一串数字中的一个数字。该字符串的长度可以从最少一位到最多九位不等。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-01
相关资源
最近更新 更多