1

テキストファイルに次の構造があります。

class Thing1
{
    pos[]={120.03,121,134.0987};
    heading=-92.049;
    anotherthing=19;
    foo="thing";
    kind="This_item";
    foo=0.293333;
    foo="this thing";
};
class Thing2
{
 ...
}

PHP ドキュメントを使用して Web サイトの構造を読み取り、データベースに配置したいと考えています。「pos[]」、「heading」、「kind」の値が必要で、それらを行に追加する必要があります。では、これらの値を取得して変数にして使用できるようにするにはどうすればよいでしょうか。

ありがとう。

4

3 に答える 3

1

次のソリューションを作成しました。

$lines = file('your_file.txt',FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);

foreach($lines as $ky => $line) {
   $lines[$ky] = explode('=',$line);
   $lines[$ky][0] = trim($lines[$ky][0]);
   if (isset($lines[$ky][1])) {
      $lines[$ky][1] = trim($lines[$ky][1], '";\'{}');
   }
}
foreach($lines as $line){
   if ($line[0] == 'pos[]') {
      echo 'pos[] = ' . $line[1]; //echoing post[] value
   }
   if ($line[0] == 'kind') {
      echo 'kind = ' . $line[1]; //echoing kind value
   }
   if ($line[0] == 'heading') {
      echo 'heading = ' . $line[1]; //echoing heading value
   }
}

あなたのサンプルテキストでテストしましたが、うまくいっています:-)

于 2012-11-25T15:45:00.150 に答える
0

私はこの問題のために関数を書きました:

<?php
$array = parse_my_file("file.txt");

print_r($array);

function parse_my_file($file){
    if(file_exists($file)){
        $data = file_get_contents($file);
        $class = explode("class ", $data);
        unset($class[0]);
        $class_sanitized = array_map(function($v){
            $temp = explode(PHP_EOL . "{" . PHP_EOL, substr($v, 0, -4), 2);
            $temp[1] = array_filter(explode(PHP_EOL, $temp[1]));
            $temp[1] = array_map(function($w){
                $value = explode("=", trim(substr($w, 0,-1), " "));
                return($value);
            }, $temp[1]);
            return($temp);
        }, $class);

        $return_array = array();
        foreach($class_sanitized as $value){
            $return_array[$value[0]] = array_map(function($z){
            if(substr($z[1], 0, 1) == '"' AND substr($z[1], -1) == '"'){
                $z[1] = substr($z[1], 1, -1);
            }
                return(array($z[0] => $z[1]));
            }, $value[1]);
        }
        return $return_array;
    }else{
        return array("Deze bestand bestaat niet");
    }
}
?>

出力は次のとおりです。

Array
(
    [Thing1] => Array
        (
            [0] => Array
                (
                    [pos[]] => {120.03,121,134.0987}
                )

            [1] => Array
                (
                    [heading] => -92.049
                )

            [2] => Array
                (
                    [anotherthing] => 19
                )

            [3] => Array
                (
                    [foo] => thing
                )

            [4] => Array
                (
                    [kind] => This_item
                )

            [5] => Array
                (
                    [foo] => 0.293333
                )

            [6] => Array
                (
                    [foo] => this thing
                )

        )

    [Thing2] => Array
        (
            [0] => Array
                (
                    [pos[]] => {220.03,221,234.0987}
                )

            [1] => Array
                (
                    [heading] => -292.049
                )

            [2] => Array
                (
                    [anotherthing] => 219
                )

            [3] => Array
                (
                    [foo] => thing2
                )

            [4] => Array
                (
                    [kind] => This_item2
                )

            [5] => Array
                (
                    [foo] => 2.293333
                )

            [6] => Array
                (
                    [foo] => this thing2
                )

        )

)

値をエコーするには:

echo $array["Thing1"][2]["anotherthing"]; // Result 19

これがお役に立てば幸いです。

于 2012-11-25T17:17:37.633 に答える
0
$FileArray = file("yourfile.txt");
$QueryArray = array();
foreach($FileArray as $Line) {
    if (count($LineArray = explode('=', $Line)) > 1) {
        $QueryArray[$LineArray[0]] = trim($LineArray[1], ";");
    }
}

そこから、必要に応じてチェックを実行し、クエリを作成して値をデータベースに挿入できます。このようなもの:

$QueryString = "INSERT INTO {$DbName} (";
foreach($QueryArray as $Key=>$Val) {
    if ($Key == "whatever") {
        $KeyStr .= $Key.', ';
        $ValStr .= $Val.', ';
    }
}
$KeyStr = trim($KeyStr, ", ");
$ValStr = trim($ValStr, ", ");
QueryString .= "{$KeyStr}) VALUES ({$ValStr});"
于 2012-11-25T15:21:17.633 に答える