从开头到第二个下划线php获取字符串

时间:2017-07-31 16:44:53

标签: php

我有一个字符串,1006_20170731_1.png我想只得到这部分:1006_20170731_如何使用php获取此信息?我在理解strpos和substr方面遇到了麻烦。有人可以帮忙吗?

4 个答案:

答案 0 :(得分:1)

尝试此功能

function trimStringEndingByDelim($str, $delim = "_", $endingDelim = true) {

    //explode string into an array of every value between the delimiter
    $explodedString = explode($delim, $str);
    //remove the very last array element (in your case "1.png")
    array_pop($explodedString);

    //glue the remaining array elements back together with the delimiter
    $implodedString = implode($delim, $explodedString);

    //if $endingDelim is true return the string with the delimiter glued to the end
    //if it is false, just return the string
    if($endingDelim) return $implodedString.$delim;
    return $implodedString;

}

它接受你的字符串并将其转换为每个下划线点的数组,删除最后一个数组元素,然后返回带有使用implode函数重新添加下划线的字符串。

如果需要,您还可以传递不同的分隔符,例如$var = removeEnd("this|is|a|string|1.png","|")将返回this|is|a|string|

您可以通过将第3个参数设置为" false"来切换结束分隔符,默认情况下它会在末尾添加分隔符。

$var = removeEnd("this|is|a|string|1.png","|",false)会返回this|is|a|string

使用此功能的额外好处是,无论使用多少分隔符,它都可以使用,只要您始终只想修剪最后一个分隔符。这可以很容易地修改,以删除许多你想要的结束。

答案 1 :(得分:1)

以下是一个简单示例:https://iconoun.com/demo/temp_jopekz.php

<?php // demo/temp_jopekz.php
/**
 * Substrings
 *
 * https://stackoverflow.com/questions/45421271/get-string-from-beginning-up-to-2nd-underscore-php
 */
error_reporting(E_ALL);
echo '<pre>';


$str = '1006_20170731_1.png';
$dlm = '_';
$arr = explode($dlm, $str);
array_pop($arr);
$new = implode($dlm, $arr) . $dlm;

echo PHP_EOL . $str;
echo PHP_EOL . $new;

答案 2 :(得分:1)

在这里,试试这个:

$str = "1006_20170731_1.png";
$parts = explode('_', $str);
$result = $parts[0] . '_' . $parts[1] . '_';

现在,$result将包含您需要的字符串。

<强>解释

explode()使用第一个参数作为分隔符将字符串拆分为数组。然后我们加入前两个部分,并根据您的要求在它们之间添加下划线,我们得到了结果。

请查看相应的参考文档: explode()

有关更一般的方法:

$str = "1006_20170731_1.png";
$delimiter = '_';
$parts = explode($delimiter, $str);

// if we only need to take the first n parts
$n = 2;
$firstNparts = array_slice($parts, 0, $n);
$result = implode($delimiter, $firstNparts) . $delimiter;    

现在,您的$result将包含按分隔符分隔的第一个n部分。

文档:
array_slice()
implode()

答案 3 :(得分:-1)

pathinfo功能可以满足您的需求。请参阅文档 - http://php.net/manual/en/function.pathinfo.php