2016-08-31 2 views
-2

У меня есть строка, которая выглядит следующим образом:Удалить цитаты из строки внутри массива

$string = '"excludeIF":["miniTrack","isTriangleHanger","tubeTrack","boxTrack"]';

Мне нужно избавиться от ", которые находятся внутри [] массива, так это выглядит следующим образом:

$string = '"excludeIF":[miniTrack, tubeTrack, boxTrack]';

Я пытался некоторое регулярное выражение, но я все избавившись от всех цитат.

+6

Этот вопрос [проблема XY] (HTTP: // мета. stackexchange.com/questions/66377/what-is-the-xy-problem), написанных по всему миру. Можете ли вы объяснить, как вы получили эту строку в первую очередь и почему вы пытаетесь удалить из нее цитаты? * Подсказка * тот факт, что вы используете слово ___array___ для описания строки, является огромным индикатором X в этом Y. – Sherif

+0

Это похоже на то, что вы пытаетесь уничтожить хорошую строку JSON – Forbs

+0

смотрите предыдущий вопрос OP для лучшего понимания от того, что он делает. Кто-то даже может быть склонен закрыть его как обман – nogad

ответ

3

Для этого конкретного примера:

$string = '"excludeIF":["miniTrack","isTriangleHanger","tubeTrack","boxTrack"]'; 
preg_match("/((?<=\[).*(?=\]))/", $string, $match); 
$change = str_replace('"', "", $match[0]); 
$result = preg_replace("/$match[0]/", $change, $string); 

Что это делает он получает содержимое внутри квадратных скобок, удаляет кавычки, а затем заменяет исходное содержание с очищаемой содержанием.

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

Надеюсь, это поможет.

PS. Это также помогло бы, если бы вы показали нам, какие регулярные выражения вы пытались, как и вы, возможно, на правильном пути, но просто имели некоторые недоразумения.

+0

, если вы посмотрите на его предыдущий вопрос, вы увидите, что на самом деле это не ответ на его вопросы. – nogad

+0

Я отвечаю только на вопрос, который я вижу и был опубликован. –

+0

Я предлагаю вам ознакомиться с проблемой [XY] (http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem) – nogad

-1

тест этот код:

<?php 
$string = '"excludeIF":["miniTrack","isTriangleHanger","tubeTrack","boxTrack"]'; 
$str_array = str_split($string); 
$string_new = ''; 
$id = 0; 
foreach ($str_array as $value) { 
    if($value == '[' || $id != 0){ 
     $id = ($value != ']') ? 1 : 0; 
     $string_new .= ($value != "\"") ? $value : '' ; 
    } else { 
     $string_new .= $value; 
    } 
} 
echo $string_new; 
//RESULT "excludeIF":[miniTrack,isTriangleHanger,tubeTrack,boxTrack] 
?> 

Успехов!

EDIT

<?php 
$string = '"excludeIF":["miniTrack","isTriangleHanger","tubeTrack","boxTrack"]'; 
$part = str_replace("\"","",(strstr($string,'['))); 
$string = substr($string,0,strpos($string,'[')).$part; 
echo $string; 
?> 

Другое возможное решение.

Fun с кодом!

+0

Вы думаете, что цикл, хотя каждый персонаж эффективен? – nogad

+0

Нет, но это возможное решение, нет? Забава с кодом! – kip

1

Так что я согласен с комментарием о проблеме XY, но я все равно хотел бы попробовать помочь.

$string = '"excludeIF":["miniTrack","isTriangleHanger","tubeTrack","boxTrack"]'; 

Теперь вам нужно найти начальную и конечную позиции строки, которую вы хотите отредактировать. Это может быть сделано следующим:

$stringPosition1 = strpos($string,'['); 
$stringPosition2 = strpos($string,']'); 

Теперь у вас есть правильные позиции вы способны сделать substr() найти точную строку, которую вы хотите редактировать.

$str = substr($string,$stringPosition1,$stringPosition2); 

Отсюда можно сделать простой str_replace()

$replacedString = str_replace('"','',$str); 
$result = '"excludeIF":' . $replacedString; 

Это отличная идея, чтобы посмотреть на PHP документы, если вы боретесь, чтобы понять, какой-либо из перечисленных выше функций. Я искренне верю, что вы так же хороши в кодировании, как и ваши знания языка.Поэтому, пожалуйста, есть чтение следующих документов: