2

文字列から単純な配列を取得しようとしています。

Ej。[位置] => ???? [見出し] => ??? [ピッチ] => ??? [ズーム] => ???

しかし、何らかの理由で次のエラーが発生します。

注意: 未定義のインデックス: 21 行目の見出し

PHPコードは次のとおりです。

<?php
$mysql_data= 
"position: 34.032616, -118.286564|
heading: -159.50240187408838|
pitch: 0|
zoom: 2";


$pov = explode("|", $mysql_data);
foreach($pov as $key)
{
    $element = explode(": ", $key);
    $pov[ $element[0] ] = $element[1];
}
unset($element);


//Testing echoes
print_r($pov);
echo "\n";
echo $pov['heading'];
?>

また、これを一度に実行して foreach をすべてスキップする簡単な方法はありますか?
ところで:キーの0、1などは必要ありません。「見出し」、「ズーム」などのラベルが付いたものだけです

4

2 に答える 2

6

の前に改行がありますheading

ループ内ではtrim()、配列キー (および念のための値)を使用する必要があります。

$pov[ trim($element[0]) ] = trim($element[1]);

アップデート

単純な正規表現もこれを処理します。

$s = <<<EOM
position: 34.032616, -118.286564|
heading: -159.50240187408838|
pitch: 0|
zoom: 2
EOM;

if (preg_match_all('/(\w+):([^|]+)/', $s, $matches)) {
    $pov = array_combine($matches[1], $matches[2]);
}

ところで:ハックを使用しないでくださいparse_str。その関数は、すでに適切に URL エンコードされているデータを対象としており、正直なところ、この仕事には不適切なツールです。

于 2012-06-04T02:25:48.613 に答える
1

foreach()入力文字列に改行がないと仮定して、なしでそれを行うより簡単な方法:

$str = 'position: 34.032616, -118.286564|heading: -159.50240187408838|pitch: 0|zoom: 2';
$str = str_replace(array('|',':'), array('&','='), $mysql_data);

parse_str($str, $pov);

print_r($pov);
/*
Array
(
    [position] =>  34.032616, -118.286564
    [heading] =>  -159.50240187408838
    [pitch] =>  0
    [zoom] =>  2
)
*/

入力文字列に改行がある場合は、str_replaceargs の規則を変更します。

str_replace(array("\r\n","\n",'|',':'), array('','','&','='), $mysql_data);
于 2012-06-04T02:58:53.907 に答える