2012-08-01 95 views
0

例如:在PHP中有可能爆炸3維?

$sting = 'house : 3 bedroom, car : porsche 911 wife : model'; 

爆炸的條件:對於行,並且對於列,以形成正是如此

array(

    "house" => "3 bedroom" 

    "car" => "porsche 911" 

    "wife" => "model" 

) 

在不具有爆炸在foreach爆炸的陣列。

+7

生活的美好生活在那裏! – 2012-08-01 08:53:17

+0

我會簡單地使用foreach循環,因爲這是最簡單的方法,並創建最佳的可讀代碼。您可以使用的所有替代命令使此任務變得不必要的複雜。 – Armin 2012-08-01 09:06:32

回答

1

如果您不想使用foreach您可以在array_maparray_walk上使用回調,但仍在迭代陣列。爲什麼不使用foreach?

您必須使用爆炸兩次才能達到此目的。首先以分離entires,然後到entires分成鍵和值:使用

$string = 'house : 10 bedroom, car : porsche 911, wife : model'; 
$elements = explode(',', $string); 
array_walk($elements, 'trim'); 

$goodLife = array(); 

foreach($elements as $element) { 
    list($key, $value) = explode(':', $element, 2); 
    $goodLife[trim($key)] = trim($value); 
} 

print_r($goodLife); 

功能:

+0

問題是**沒有**使用foreach循環。 – Armin 2012-08-01 08:58:13

+1

@Armin我錯過了。沒有某種形式的迭代就沒有辦法做到這一點。無論是'foreach'還是'array_reduce()','array_walk()'或array_map()'的回調,都需要迭代。 – 2012-08-01 09:04:46

+0

問題是不得不做一個嵌套的foreach,但你縫合有一個。謝謝,看起來它會這樣做。 – 2012-08-01 09:11:07

0

沒有foreach,我不認爲他們提供了這樣的方法。

+0

嗯,它應該。我現在必須自己動手。 – 2012-08-01 09:09:21

0

我想這是不可能的,沒有使用foreach循環 - 因爲在PHP中沒有可以將字符串拆分爲數組鍵和值的命令。

+0

我記得有一次我使用了將爆炸陣列轉化爲 $ house =「3 bedroom」的函數; 我不記得它被稱爲。 – 2012-08-01 09:01:43

+0

晴朗的天氣? ^^ – Armin 2012-08-01 09:02:32

2
$result = array_reduce(
    explode(',', $sting /*[sic!] ;)*/), 
    function ($array, $item) { 
     list ($key, $value) = explode(':', $item, 2); 
     $array[trim($key)] = trim($value); 
     return $array; 
    }, 
    array() 
); 

array_reduce()

1

不能想出什麼比這更聰明:

$s = 'house : 3 bedroom, car : porsche 911 wife : model'; 
$a = preg_split("/[:,]/", $s); 
$b = array(); 
array_unshift($a, false); 
while (false !== $key = next($a)) { 
    $b[$key] = next($a); 
} 
+0

'next()'返回'false',無論如何,如果指針總是結束,那麼額外的'false'有什麼好處呢? ('while(($ key = next($ a))&&($ value = next($ a))){$ b [$ key] = $ value;}') – KingCrunch 2012-08-01 09:09:43