2012-10-12 47 views
0

我期待搶位於看起來像這樣的字符串的數據: string(22) "width="16" height="16""爆炸,在有引號的字符串它

我希望能使用爆炸功能搶到16個和16個值並將它們放入我可以使用的數組中。但我不知道如何在PHP中使用explode函數中的$num。通常我只有一個可以使用的逗號。

事情是這樣的,但我知道這是錯誤的:

$size = "width="16" height="16"" 
$sizes = explode('""', $size); 

這一切確實是:array(1) { [0]=> string(5) "Array" }

回答

1

試試這個

preg_match_all('/"([^"]+)"/', 'width="16" height="16"', $matches); 
$result = $matches[1]; 

/* print_r($result); 
Array 
(
     [0] => 16 
     [1] => 16 
) 
*/ 
+0

我認爲這是最好的 – estern

0

你可以使用正則表達式來選擇值,如果他們將是唯一的數字在字符串(1234567890)中。 preg_filter()會做這樣的事情 - 只要讓你的「替換」替換自己的比賽('$1')。

2

奇怪的變量。

無論哪種方式,爲什麼不使用拆分命令?

$size = 'width="16" height="16"'; 

$split_sizes = explode('"',$size); 
$count = count($split_sizes); 

for ($i = 1; $i < $count; $i += 2) { 
    $sizes[] = $split_sizes[$i]; 
} 

這裏的假設是字符串將只填充成對的未加引號的鍵和雙引號值。

+0

完美,正是我一直在尋找! – estern

3

explode()不會爲你做這個;它只是將一個字符串分割成一個常量分隔符(比如逗號),而你需要做的是從引號之間提取文本。在這個簡單的例子,你可以使用preg_match_all()來完成這項工作:

$str = 'width="16" height="16"'; 
preg_match_all('/\"(.*?)\"/', $str, $matches); 
print_r($matches); 

回報

Array 
(
    [0] => Array 
    (
     [0] => "16" 
     [1] => "16" 
    ) 

    [1] => Array 
    (
     [0] => 16 
     [1] => 16 
    ) 
) 

- 換句話說,在preg_match_all()調用之後,$匹配[1]包含一個由該模式匹配的值數組,在這種情況下,它是您所追蹤的屬性值。

+0

+1,因爲不使用爆破舊式的方式。不知道爲什麼你在那裏有問號,因爲已經有一個星號。也許它應該在括號之外? – johnrom

+0

感謝您的回答,這看起來像一個乾淨的方式,使用較少的代碼。 – estern

+0

@johnrom:問號將*量詞變成吝嗇;默認情況下它會匹配儘可能多的字符,在這種情況下,它會使它匹配'16「height =」16「 - 字符串中第一個引號和最後一個之間的所有內容。如果這不是您以前遇到過的情況,您可能希望提高對Perl兼容正則表達式的熟悉程度。 –

1

這是我會怎麼做:

$size = 'width="16" height="16" maxlength="200"'; 
preg_match_all('/([A-Za-z\-]+)=/',$size,$fields); 
preg_match_all('/[A-Za-z\-]+="([A-Za-z0-9_\-]+)"/',$size,$values); 
var_dump($fields[1]); 
var_dump($values[1]); 

// gives you 
array(3) { 
    [0]=> 
    string(5) "width" 
    [1]=> 
    string(6) "height" 
    [2]=> 
    string(9) "maxlength" 
} 
array(3) { 
    [0]=> 
    string(2) "16" 
    [1]=> 
    string(2) "16" 
    [2]=> 
    string(3) "200" 
} 
0

如何擺脫雙引號和爆炸的空間。然後,$尺寸將如下所示:

{ 
    [0]=> width=16 
    [1]=> height=16 
} 

然後,您可以在等號上分解$尺寸的每個切片以獲取值。

{ 
    [0] => width 
    [1] => 16 
} 
{ 
    [0] => height 
    [1] => 16 
} 

示例代碼:

<?php 

$size = 'width="16" height="16"; 
//get rid of all double quotes 
$size = str_replace('"', '', $size); 
$sizes = explode(' ', $size); 
//show what is in the sizes array 
print_r($sizes); 
//loop through each slide of the sizes array 
foreach($sizes as $val) 
{ 
    $vals = explode('=', $val); 
//show what is in the vals array during this iteration 
    print_r($vals); 
} 

?> 
0

您可以簡單地使用

explode("\"",$string);