php
  • multidimensional-array
  • explode
  • 2017-12-20 16 views 0 likes 
    0

    "explode"の文字列出力を配列に変換するにはどうすればよいですか?この文字列が与えられ"explode"の出力を文字列から配列に変換する

    $long_string = '("name" => "Able","company" => "Tesla","haircolor" => 
    "brown","name" => "Aaaa","home" => "Kansas","shoe" => 12,)<>("name" => 
    "Bob","company" => "Target","haircolor" => "red","name" => "Bbbb","home" => 
    "Ohio","shoe" => 11.5)' ; 
    

    爆発は2つの文字列を含む単一の配列を生成します。

    $multi_strings = explode("<>",$long_string); 
    

    $ multi_strings 2つの文字列の配列です:親配列内にネストされた配列にこれらの2つの文字列を変換するには

    array(2) { 
        [0]=> string(112) "("name" => "Able","company" => "Tesla","haircolor" => 
        "brown","name" => "Aaaa","home" => "Kansas","shoe" => 12,)" 
    
        [1]=> string(110) "("name" => "Bob","company" => "Target","haircolor" => 
    "red","name" => "Bbbb","home" => "Ohio","shoe" => 11.5)" 
    } 
    

    PHPの関数があるはずと思われるが、私はできないようですそれを見つける。
    これを達成するために独自の関数を作成する必要がありますか?

    +0

    この文字列はどこにありますか? –

    +0

    これは一例です。実際のデータはデータ供給元からのもので、.csvファイルになっていましたが、実際にはガーガージの文字列でした。これをこれに変えるには38ステップが必要でした。 – Dustin

    +0

    csvファイルを解析すると、すでに配列が得られます。 –

    答えて

    2

    2番目のパラメータがtrueの文字列でjson_decodeを使用すると、出力として連想配列が取得されます。

    $url = "https://api.iextrading.com/1.0/stock/market/batch?symbols=aapl,tsla,ge&types=quote,earnings,stats"; 
    $arr = json_decode(file_get_contents($url), true); 
    Var_dump($arr); 
    

    ここを参照してください。
    私はページから文字列をコピーし、$ strとして投稿しました。
    https://3v4l.org/duWrI
    2つのステップがすべて必要です。

    +0

    これは方法です – fab2s

    +0

    これはちょうどawsomeです。ありがとうございました!完璧に動作します。 – Dustin

    1

    長い文字列は、非常に不良な配列記憶カスタムフォーマットです。配列をより効率的に格納するには、json_encodeまたはserializeを使用する方がはるかに効率的です。あなたはそれで立ち往生している場合

    さて、あなたははevalのを使用せずにこれを行うことができます:

    $long_string = '("name" => "Able","company" => "Tesla","haircolor" => 
    "brown","name" => "Aaaa","home" => "Kansas","shoe" => 12,)<>("name" => 
    "Bob","company" => "Target","haircolor" => "red","name" => "Bbbb","home" => 
    "Ohio","shoe" => 11.5)'; 
    $parts = explode('<>', $long_string); 
    eval('$result = array(array' . $parts[0] . ', array' . $parts[1] . ');'); 
    print_r($result); 
    

    の$ long_stringが探している場合に実行することができ、これは醜いとかなり安全ではないと言うする必要はありませんphpコードのように。

    もう1つ、より安全な方法は、手動で文字列を解析し、その中から配列を作成することです。しかし、それほど単純ではないコードが必要になります。もう一度、別のフォーマットを使用できるのであれば、それをやり直してください。

    +1

    '$ parts [0] ... $ parts [0]'? '$ parts [0] ... $ parts [1]'ではありませんか? – Andreas

    +0

    注意していただきありがとうございますコードを編集しました – fab2s

    +0

    fab2s - ありがとうございます。それは動作します。 $ long_stringを使ってwhachから何がそんなに出ているのか教えてください。これは、PHPマニュアルのサンプル#3のコードとまったく同じように構造化されています。 http://php.net/manual/en/language.types.array.php – Dustin

    0

    これは私が必要なものを達成しました: ここから:http://php.net/manual/en/function.explode.php 例:ここでは、文字列を爆発させる "マルチ"関数です。

    <?php 
    
    $long_string = '"name" => "Able","company" => "Tesla","haircolor" => "brown","name" => "Aaaa","home" => "Kansas","shoe" => 12<>"name" => "Bob","company" => "Target","haircolor" => "red","name" => "Bbbb","home" =>"Ohio","shoe" => 11.5'; 
    
    function multiexplode ($delimiters,$string) { 
        $ary = explode($delimiters[0],$string); 
        array_shift($delimiters); 
        if($delimiters != NULL) { 
         foreach($ary as $key => $val) { 
          $ary[$key] = multiexplode($delimiters, $val); 
         } 
        } 
        return $ary; 
    } 
    
    // Example of use 
    // $string = "1-2-3|4-5|6:7-8-9-0|1,2:3-4|5"; 
    // $delimiters = Array(",",":","|","-"); 
    
    $delimiters = Array("<>",","); 
    
    $res = multiexplode($delimiters,$long_string); 
    echo '<pre>'; 
    print_r($res); 
    echo '</pre>'; 
    ?> 
    
    関連する問題