Как обрабатывать мои данные? - PullRequest
0 голосов
/ 11 марта 2012

Редактировать: Цель моего метода - удалить значение из строки в базе данных.

Кажется, я не могу найти ответ на этот вопрос в любом месте.Можете ли вы объединить внутри str_replace следующим образом:

str_replace($pid . ",","",$boom);
  • $ pid - это идентификатор страницы, например, 40
  • $ boom - это разобранный массив

Если у меня есть строка: 40,56,12, я хочу сделать ее 56,12, но без конкатенации в ней получится:

, 56,12

Когда у меня есть concat в str_replace, он ничего не делает.Это возможно?

Ответы [ 5 ]

2 голосов
/ 11 марта 2012

Поскольку $ boom является массивом, вам не нужно использовать массив в вашем случае.

Измените это

$boom = explode(",",$ticket_array);
$boom = str_replace($pid . ",","",$boom);
$together = implode(",",$boom);

на

$together = str_replace($pid . ",","",$ticket_array);

Обновление: если вы все еще хотите использовать массив

$boom = explode(",",$ticket_array);
unset($boom[array_search($pid, $boom)]);
$together = implode(",",$boom);
2 голосов
/ 11 марта 2012

Отвечая на ваш вопрос: да, вы можете.Этот код работает так, как вы ожидаете.

Но этот подход неверен.Он не будет работать для $pid = 12; (последний элемент, без завершающей запятой) и будет некорректно заменять 40, в $boom = '140,20,12';

. Вы должны держать его в массиве, искать нежелательное значение, если найдено, сбросить егоиз массива и затем взорваться с комой.

$boom = array_filter($boom);
$key = array_search($pid, $boom);
if($key !== false){
    unset($boom[$key]);
}
$boom = implode(',',$boom);

[+] Ваш код не работает, потому что $boom является массивом, а str_replace работает со строкой.

1 голос
/ 11 марта 2012

Вы должны хранить свой «билетный массив» в отдельной таблице .
И использовать обычные SQL-запросы (UPDATE, DELETE) для манипулирования им.

A реляционное слово в названии вашей базы данных является причиной. И вы злоупотребляете этим умным программным обеспечением таким варварским подходом.

1 голос
/ 11 марта 2012

Вы можете использовать str_split, он преобразует строку в массив, а затем с помощью цикла foreach выводит все значения, кроме первого.

$numbers_string="40,56,12";
$numbers_array = str_split($numbers_string);
//then, when you have the array of numbers, you could echo every number except the first separating them with a comma
foreach ($numbers_array as $key => $value) {
  if ($key > 0) {
    echo $value . ", ";
  }
}

Если вы хотите пропустить значение не по его позиции в массиве, а по его значению, вы можете сделать это вместо этого:

$unwanted_value="40";
foreach ($numbers_array as $key => $value) {
  if ($value != $unwanted_value) {

    echo $value . ", ";
  }
  else {
    unset($numbers_array[$key]);
    $numbers_array = array_values($numbers_array);
    var_dump($numbers_array);

  }
}
1 голос
/ 11 марта 2012

После того, как вы отредактировали, становится ясно, что вы хотите удалить значение $pid из массива $boom, который содержит одно число в качестве значения.Вы можете использовать array_search, чтобы узнать, в каком ключе он находится.Затем вы можете unset элемент из $boom:

$pid = '40';
$boom = explode(',', '40,56,12');
$r = array_search($pid, $boom, FALSE);
if ($r !== FALSE) {
    unset($boom[$r]);
}

Старый вопрос:

Можете ли вы объединить внутри str_replace как это: ...?

Да, вы можете, посмотрите пример:

$pid = '40';
$boom = array('40,56,12');
print_r(str_replace($pid . ",", "", $boom));

Результат:

Array
(
    [0] => 56,12
)

Это очень похоже на то, что вы сделали, поэтому вы можете искатьпроблема не в том месте.Для параметра можно использовать любую строку выражение .

Возможно, вам будет проще, если вы не уверены, что сначала создадите переменную:

$pid = '40';
$boom = array('40,56,12');
$search = sprintf("%d,", $pid);
print_r(str_replace($search, "", $boom));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...