2011-05-25 5 views
0

のタブで区切られた文字列:多次元explode();私はDrupalの中のビューで働いていると、次のような文字列が与えられている連番の配列キー

Room: Bedroom Length: 5.00 Width: 5.00 Area: 25.00 Room: Bathroom Length: 3.00 Width: 3.00 Area: 9.00 

これは、2つの「部屋」のオブジェクトのためである、長さがそれぞれ、幅と面積。

どのように私は次のような多次元配列にこれを爆発します:あなたが知っているように

array([0] => array([room] => "Bedroom" [length] => "5.00" [width] => "5.00" [area] => "25.00") 
     [1] => array([room] => "Bathroom" [length] => "3.00" [width] => "3.00" [area] => "9.00")) 

答えて

0

、最初のステップは、それで遊ぶことができるように、変数に文字列を置くことになります。文字列を "Room"に分割しますが、$ specに2つの部屋があるかのようにこの例を続けます。

//need the string in a variable .... 
$specs = "Room: Bedroom Length: 5.00 Width: 5.00 Area: 25.00 Room: Bathroom Length: 3.00 Width: 3.00 Area: 9.00"; 

//Explode your string on space caracter: 
$specs_exploded = explode(" ", $specs); 

// Then, call the following function to build your array: 
$specs_array = build_specs($specs_exploded); 

// Function that builds and returns specs_array. 
function build_specs(Array $specs){ 

    $spec_array = array(); 

    $spec_array[] = array("room" => $specs[1], 
          "length" => $specs[3], 
          "width" => $specs[5], 
          // you could also set the key programmaticaly... 
          // the following woud give you "Area" => 25.00 
          $specs[6] => $specs[7], 
         ); 

        // Second room 
    $spec_array[] = array("room" => $specs[9], 

         // etc... 
         ); 
    return $spec_array; 
} 

この例の関数は2つのルームを排他的に扱います。これは、 "rooms"の文字列を分割し、strpos()を使用して部屋の配列を返す関数が1つあれば、より効果的です。

返された部屋配列を、一度に1つの部屋しか処理しない上記の関数のバージョンに渡します。

これはあなたがローリングするのに十分です、幸運を望む!

+0

私は奇妙な区切り文字で文字列の代わりに実際にオブジェクトとしてオブジェクトが流れたように、ビューをやり直すだけでした。私が作業していた複雑なフィールドタイプの関係を作成する必要がありました。それにもかかわらず、私はおそらくあなたのコードを使用していたのであなたの答えを受け入れる私はこのように続けた。 – aendrew

関連する問題