2014-06-09 2 views
-1

Дано:Снимите переднюю часть строки, используя массив вариантов удаления

  • Массив модельных чисел, т.е. (30, 50, 55, 85, 120)
  • одну строку, содержащую номер модели, которая гарантированно будет в массиве, сразу после номер подмодели. Суб может быть числом от 1 до 50.
  • Примеры: 12022, 502, 55123

Требуются:

  • один выход строка, содержащая только номер подмоделями, т.е. 22, 2, 123
  • aka передняя часть строки, которая была в массиве, удалена
  • Примеры: 12022 =>22, 1202 =>2, 502 =>2, 55123 =>123, 5050 =>50

я могу думать о различных способов сделать это, но, глядя на что-то кратким. Бонус, если это также эстетично :)

+2

Не могли бы вы опубликовать ваши попытки пожалуйста ... – War10ck

+0

ли вы когда-либо (к примеру) и ' 12' и '120' в вашем массиве modelnumbers? Если да, то что нужно удалить? – Steve

+0

отправил попытку как ответ .. + возможно, что в массиве будет присутствовать двусмысленность. Если это так, нормально сбой (например, исключение). Или просто удалите первое совпадение и верните его. – Dennis

ответ

0
<?php 
    $arr = array(30, 50, 55, 85, 120); // Array of forbiddens 
    $str = "12022, 502, 55123"; // Your string 
    $sep = array_map('trim', explode(",", $str)); 
    foreach($sep as $key => $value) 
     foreach ($arr as $sec) 
      if(preg_match("@^[email protected]", $value)) 
       $sep[$key] = substr($value, strlen($sec)); 
    print_r($sep); 

Выход:

Array 
(
    [0] => 22 
    [1] => 2 
    [2] => 123 
) 
-4

просто цикл массива и заменить в строке все значения массива в пустую строку

+2

Это не сработает, а если одна из строк - 30155? –

+0

sowhat? ....... – Dima

+0

Так что это сломает запрос «Удалить переднюю часть строки, если она существует в массиве», так как ваше предложение просто удалило переднюю и обратно. –

0

Моя попытка:

$v = array(120, 50, 55); 
print removeModel("502", $v); 

function removeModel($str, $v) 
{ 
    foreach($v as $value) 
     if (preg_match("/^$value/",$str)) 
      return preg_replace("/$value/", "", $str); 
} 
0

Вы можете использовать substr($yourString, $x) функцию, чтобы вырезать первый $x символы от $yourString.

Моя идея:

<?php 
    $str = "502"; //or "12022" for testing 
    if(strlen($str)==3) 
     $newStr=substr($str, (strlen($str)-1)); //502 -> 2 
    else 
     $newStr=substr($str, (strlen($str)-2)); //12022 -> 22 
    echo ltrim($newStr, '0'); 
    ?> 
+0

, что может сработать. Думаю, что все больше и больше зависит от того, что такое числа. то есть возможно, что у нас будет '1202' (ответ« 2 ») и« 5022 »(ответ« 22 »), чтобы код не сработал. Поскольку число подмоделей $ обычно равно одному или двум символам – Dennis

+0

Обновлено.Я не очень хорошо понял, что вы делаете с этими строками, поэтому я написал код, строго рассматривающий ваш пример ... – RazvanZ

+0

У меня также могут быть номера типа «1202» и «12022», где «120» - это модель число и «2», или «22» - это подмодель. Номер модели - это то, что находится в массиве. Субмодель может составлять от 1 до 50 или около того. – Dennis

Смежные вопросы