2014-01-07 3 views
-1

Моя строка что-то вроде этогоУдалить лишнюю запятую в строке

22,31,30

Я хочу удалить 31, из этой строки, так он должен будет: 22,30

Я использую это:

$string = '21,31,30'; 
$newstring = str_replace("31", "", $string); 
echo $newstring = trim($newstring, ","); 

Но отголоски этого: 21,,30

Пожалуйста, помогите!

+0

Так что просто используйте 'str_replace (" 31, "," ", $ string);' вместо этого? –

ответ

2

он будет решать свою первую и последнюю проблему элементов тоже: демо: https://eval.in/86932

$string = '31,21,31,30,31'; 
$newstring = str_replace("31", "", $string); 
$newstring =trim(str_replace(",,", ",", $newstring),','); 
echo $newstring; 
+2

@ user2854563: он заменит любые двойные запятые из строки –

+0

. Одна вещь, оставленная необъяснимой, извините, что при удалении '31,' Я не уверен, что слово содержит запятую рядом с ней или нет, это может быть просто '30', значит, нет запятой в конце, так как это сделать? – user2854563

+0

@ user2854563: Я отредактировал свой ответ. Он должен решить вашу проблему :) Можете ли вы попробовать это? –

0
$newstring = str_replace("31,", "", $string); 

Вы пропустили запятую из того, что хотите заменить!

+0

если 31 находится в конце строки? – Paul

+0

Одна вещь, оставленная необъяснимой, извините, что при удалении '31,' я не уверен, что слово содержит запятую рядом с ней или нет, это может быть просто «30» означает «Нет запятой» в конце, так как сделай это? – user2854563

0

Вы можете быть уверены, что в строке будет запятая рядом с ней? Если это так, то вы можете сделать следующее:

$string = '21,31,30'; 
$newstring = str_replace("31", "", $string); 
$newstring2 = str_replace(",,", "", $newstring); 
echo $newstring2 = trim($newstring2, ","); 

выше будет работать (хотя это не элегантно) - это убедиться, что если есть запятая вокруг 31, она будет удалена. Однако он также удалит любые пустые предметы, такие как «21, 30», после замены будет «21,30».

+0

Одна вещь, оставшаяся необъяснимой, извините, что при удалении '31,' я не уверен, что слово содержит запятую рядом с ней или нет, это может быть просто '30' означает« Нет запятой »в конце, поэтому как сделай это? – user2854563

1

Вам не хватает запятой в вашем str_replace. Попробуйте

$newstring = str_replace("31,", "", $string); 

Если вам нужно удалить любой элемент, вы можете сделать это ::

$string='21,31,30'; 
$array=explode(",",$string); 
$index=1; //Will remove the 2nd element of the array; 
array_splice($array, $index, 1); 
$newstring=implode(",",$array); 
+0

Одна вещь, оставленная необъяснимой, извините, что при удалении '31,' я не уверен, что слово содержит запятую рядом с ней или нет, это может быть просто «30» означает «Нет запятой» в конце, так как сделай это? – user2854563

+0

@ user2854563 Я думаю, что то, что я сделал, будет работать. Если вам нужно найти элемент, вы можете использовать 'indexOf' – scrblnrd3

1

trim только удаляет символы с начала или конца строки, а не посередине.

Если вы не знаете, будет ли запятая после номера или нет, и особенно, если вы хотите удалить кучу цифр из длинного списка, вы можете попробовать что-то вроде

$string = '21,31,30'; 
$newstring = str_replace("31", "", $string); 
while (strpos($string,",,") 
    $string = str_replace(",,",",",$string); 

То есть вы удаляете любые номера, которые нужно удалить, а затем вы заменяете любые экземпляры «,,» (двойная запятая) одной запятой. while на случай, если вы удалите кучу чисел и в итоге получите три или четыре запятых подряд.

1

Вы будете have a problem, если ваше значение будет в конце строки, и вы будете использовать функцию триммера. Попробуйте следующее:

$string = '44, 55, 31'; 
$array = explode(",", $string); 

$resultArray = unset($array[array_search('31', $array)]); //here you delete your 31 

$resultstring = implode(",", $resultArray); //here will be result string without 31 
2

Как насчет использования массива, чтобы сделать его немного более чистым, портативным и многоразовым?

$string = "21,31,30"; 
$values = explode(",", $string); 
$toRemove = '31'; 

$values = array_filter($values, function($v) use ($toRemove) { 
    if ($v != $toRemove) { 
     return true; 
    } 
}); 

$newString = implode(",", $values); 

$ NewString теперь содержит «21,30»

+0

+1. Чище, чем у меня. Это то, что вы получаете, когда вы вставляете 20 программистов в комнату и даете им ту же проблему - 20 разных ответов! –

1

Это позволит удалить любой номер из строки независимо от того, какую позицию она находится.

$string = "21,14,15,67"; 
$remove = 14; 
$new = array(); 
$arr = explode(",", $string); 
foreach($arr as $val){ 
    if($val != $remove){ 
     $new[] = $val; 
    } 
} 
$string = implode(",", $new); 
echo $string; 
Смежные вопросы