PHP get everything in a string before underscore

前端 未结 4 1838
既然无缘
既然无缘 2020-12-21 10:09

I have this code here:

$imagePreFix = substr($fileinfo[\'basename\'], strpos($fileinfo[\'basename\'], \"_\") +1);

this gets me everything after

相关标签:
4条回答
  • 2020-12-21 10:40

    I think the easiest way to do this is to use explode.

    $arr = explode('_', $fileinfo['basename']);
    echo $arr[0];
    

    This will split the string into an array of substrings. The length of the array depends on how many instances of _ there was. For example

    "one_two_three"
    

    Would be broken into an array

    ["one", "two", "three"] 
    

    Here's some documentation

    0 讨论(0)
  • 2020-12-21 10:43

    If you are completely sure that there always be at least one underscore, and you are interested in first one:

    $str = $fileinfo['basename'];
    
    $tmp = explode('_', $str);
    
    $res = $tmp[0];
    

    Other way to do this:

    $str = "this_is_many_underscores_example";
    
    $matches = array();
    
    preg_match('/^[a-zA-Z0-9]+/', $str, $matches);
    
    print_r($matches[0]); //will produce "this"
    

    (probably regexp pattern will need adjustments, but for purpose of this example it works just fine).

    0 讨论(0)
  • 2020-12-21 10:44

    You should simple use:

    $imagePreFix = substr($fileinfo['basename'], 0, strpos($fileinfo['basename'], "_"));
    

    I don't see any reason to use explode and create extra array just to get first element.

    You can also use (in PHP 5.3+):

    $imagePreFix = strstr($fileinfo['basename'], '_', true); 
    
    0 讨论(0)
  • 2020-12-21 10:52

    If you want an old-school answer in the type of what you proposed you can still do the following:

    $imagePreFix = substr($fileinfo['basename'], 0, strpos($fileinfo['basename'], "_"));

    0 讨论(0)
提交回复
热议问题