मैं कैसे पता लगा सकता हूं कि एक स्ट्रिंग किसी सरणी के अंदर मानों के साथ समाप्त होती है या नहीं?

array('.1.jpg','.2.jpg','.3.jpg','.4.jpg','.5.jpg','.6.jpg','.7.jpg','.8.jpg','.9.jpg');

स्ट्रिंग हो सकती है: image.1.jpg या यह image.11.jpg हो सकती है

लेकिन मुझे केवल तभी खोजने की आवश्यकता है जब स्ट्रिंग सरणी के अंदर के मानों में से एक के साथ समाप्त हो।

0
bpy 20 पद 2019, 20:24
1
preg_match('/\.[1-9]\.jpg$/', $string)
 – 
Alex Howansky
20 पद 2019, 20:29

3 जवाब

यदि आपको स्ट्रिंग में सभी अवधियों का उपयोग करने की आवश्यकता है, तो बस पहली अवधि से अंत तक सबकुछ प्राप्त करें और देखें कि यह सरणी में है या नहीं:

if(in_array(strstr($string, '.'), $array)) {
    //yes
}

स्पष्ट रूप से my.image.1.jpg जैसा कुछ विफल हो जाएगा क्योंकि यह .image.1.jpg की तलाश करेगा।

2
AbraCadaver 20 पद 2019, 20:37
if (in_array(substr($string, -6), $array)) {
    //yes
}

जैसा कि आपके सभी उदाहरणों की लंबाई समान है। कोई REGEX या प्रतिस्थापन की आवश्यकता नहीं है।

0
Adam P. 20 पद 2019, 20:40

एक अच्छा पुराना समाधान, जो आपको सरणी में पाया गया इंडेक्स भी देता है:

function endsBy(string $str, array $arr): ?int
{
    $len = strlen($str);
    foreach ($arr as $i => $toTest) {
        $toTestLen = strlen($toTest);
        if ($toTestLen <= $len && substr_compare($str, $toTest, $len - $toTestLen) === 0) {
            return $i;
        }
    }

    return null;
}

अपने प्रश्न में वर्णित अनुसार इसका उपयोग करने के लिए:

if (endsBy($myString, $array) !== null) {
    ...
}
0
yolenoyer 20 पद 2019, 20:47