У меня есть следующий массив:
$array = array("6", "66", "67", "68", "69", "697", "698", "699");
У меня есть следующие строки:
"69212345", "6209876544", "697986546"
Я хочу найти элемент массива, который соответствует самой длинной части от начала строки, т.е.
для «69212345» будет выбрано значение «69».
для «6209876544» будет выбрано значение «6».
для «697986546» будет выбрано значение «697».
Как мне этого добиться?
попробуйте решение ниже:
$array = array("6", "66", "67", "68", "69", "697", "698", "699");
$str = '697986546';
//get all matched valuew
$new_arr = array_filter($array, function ($val) use ($str) {
return (strpos($str, $val) !== false);
});
print_r($new_arr);
if ($new_arr) {
//sort data by string length
usort($new_arr, function ($a, $b) {
return strlen($b) - strlen($a);
});
print_r($new_arr);
echo "longest value is - " . $new_arr[0];
}
выход:
Array
(
[0] => 6
[4] => 69
[5] => 697
)
Array
(
[0] => 697
[1] => 69
[2] => 6
)
longest value is - 697
Это должно работать для вас:
Просто переберите свой массив и проверьте, существует ли значение в вашей строке с помощью strpos()
и если плюс, он длиннее самой длинной подпоследовательности, вы можете переназначить ее, например,
$longestSubsequence = "";
foreach($array as $v){
if(strpos($str, $v) !== FALSE && strlen($v) > strlen($longestSubsequence ))
$longestSubsequence = $v;
}
echo $longestSubsequence;
Попробуйте это решение, используя substr ():
<?php
$match = "";
$array = array("6", "66", "67", "68", "69", "697", "698", "699");
$strings = array("69212345", "6209876544", "697986546");
for ($i=0; $i < count($strings); $i++) { //loop to get the $string values
for ($ii=0; $ii < sizeof($array); $ii++) { //loop to get the $array values
for ($iii=0; $iii < strlen($strings[$i]); $iii++) { //this loop will increment until the end of the string to compare the array if it matches the substr() of $strings
if (substr($strings[$i], 0, $iii + 1) == $array[$ii]) {
$match = $array[$ii];
}
}
}
echo "for \"" . $strings[$i] . "\" array value \"" . $match . "\" will be selected<br>";
}
?>
Выход:
for "69212345" array value "69" will be selected
for "6209876544" array value "6" will be selected
for "697986546" array value "697" will be selected