2009-04-18 7 views
2

で区切って取得私はmultidimensinal配列を持っている...例えば、このような何か:PHP:テキストはコンマ

Array (
    [0] => Array 
     (
      [title] => Star Trek - Viaje a las estrellas 
      [country] => Venezuela, Spain, long title, poster title 
     ) 

    [1] => Array 
     (
      [title] => Viaje a Las Estrellas 
      [country] => Venezuela 
     ) 
) 

私は、[国]からコンマの間にTEテキストを取得し、別のインデックスに各要素を挿入したいです、

Array (
    [0] => Array 
     (
      [title] => Star Trek - Viaje a las estrellas 
      [country] => [0] => Venezuela 
         [1] => Spain 
         [2] => long title 
         [3] => poster title 
     ) 

    [1] => Array 
     (
      [title] => Viaje a Las Estrellas 
      [country] => Venezuela 
     ) 
) 

おそらく配列レイアウトは正しくありませんが、私は何をする必要があるか説明したいと思います。 必ずしも[国]にはカンマ区切りの要素が含まれているとは限りません。

どうすればいいですか?

ありがとうございます!

答えて

4

country要素にexplode()を使用してみてください。カンマ区切りの値であるため、区切り文字は", "です。 (他の人が示唆されている方法に似ている)、それを行うには

一つの方法は、次のようになります。

// Assuming that $data contains your multidimensional array... 
for ($i = 0; $i < count($data); $i++) 
{ 
    if (strstr($data[$i]['country'], ', ')) 
    { 
     $data[$i]['country'] = explode(', ', $data[$i]['country']); 
    } 
} 

また、あなたが本当にstrpos()使用する必要はありませんのでご注意 - 完全にここstrstr()作品を。

+0

-1コードの欠如とstrpos機能の欠如のために。 –

+0

コードが不足していますが、strposは必要ありません。 – Anthony

+0

strposは私からの方がいいでしょう。 – OIS

1

あなたは文字列を分割するpreg_split機能や正規表現を使用することができます。

foreach ($array as $key => $item) { 
    if (strpos($item['country'], ',') !== false) { // check if string contains a comma 
     $array[$key]['country'] = preg_split('/,\s*/', $item['country']); 
    } 
} 
+0

完全に良いexplode()関数が利用可能なときにpreg_splitを使う理由は何ですか? –

+1

@Paolo Bergantino:可能なスペース文字も削除します。 – Gumbo

+2

explode()の区切り文字にスペースを入れてみませんか? preg_split()はここで過酷なようなものです... – hbw

0
$a = Array (
    0 => Array 
     (
      "title" => "Star Trek - Viaje a las estrellas", 
      "country" => "Venezuela, Spain, long title, poster title" 
     ), 

    1 => Array 
     (
      "title" => "Viaje a Las Estrellas", 
      "country" => "Venezuela" 
     ) 
); 
$res = array();  
    foreach($a as $k => $v){ 
     foreach($v as $key => $value){ 
      switch($key){ 
       case "country":         
        $r = split(",", $value); 
        foreach($r as $index => $val){ 
         $res[$k][$key][$index] = trim($val); 
        } 
        break; 
       default: 
        $res[$k][$key] = $value; 
       break; 
      } 
     } 
    } 

    print_r($res); 

出力:

Array 
(
    [0] => Array 
     (
      [title] => Star Trek - Viaje a las estrellas 
      [country] => Array 
       (
        [0] => Venezuela 
        [1] => Spain 
        [2] => long title 
        [3] => poster title 
       ) 
     ) 
    [1] => Array 
     (
      [title] => Viaje a Las Estrellas 
      [country] => Array 
       (
        [0] => Venezuela 
       ) 
     ) 
) 
+0

区切り文字として '、'だけを使用して文字列を展開するので、国の配列の3つの値の先頭に空白があることに注意してください。 – hbw

+0

このコードはかなり悪いです... – OIS

関連する問題