2

次のような配列から特定のデータを取得しようとしています

$array[] = "test type: human; Including all the test; number of participants 2 persons + additional  $50";

次のタイプの情報のみを検討しています。

出力:

array[1] test type: human; 
array[2] 2

これらの情報のみを出力に表示できるはずです。テストの種類はケースごとに異なり、参加者数は他の注文では異なります。指定された配列から上記の基本情報のみを取得したいと思います。指定された配列をセミコロンで分解し、後でサブ文字列を使用して目的の結果を得る方法を調べました。しかし、データを取得する効率的な方法を探しています。どんな助けや提案も本当に感謝しています。

4

4 に答える 4

5

配列と文字列を誤解しているようです。

配列
http://php.net/manual/en/language.types.array.php

文字列 (変数内)
http://www.php.net/manual/en/language.variables.basics.php

現在使用している変数と文字列のアプローチを使用できますが、正直なところ、単一の変数/文字列で感情的に異なるキーと値を使用することで、苦痛の世界に身を置くことになります。これが配列の目的です。

文字列は単一のエンティティであり、おそらく多くの文字や単語などですが、1 つのことが必要な場合に使用する必要があります。$TheName = "ボブ";
配列は、複数の文字列またはデータ セットを一度に格納、操作、および利用する場合に使用します。つまり、データベース結果のロードです。

そのため、配列を使用する必要があるように思えます。コードを配列にするには、次のようにします。

$array = array(
               "test type" => "human", 
               "number of participants" => "2 persons", 
                "additional" => "$50"
               );

配列の KEY は "" 内の最初のテキストです。次に、 を使用してその KEY に VALUE を割り当て=>ます。引用符で囲まれた次のテキストは VALUE です。KEY と VALUE の各ペアはカンマで区切ります。配列内の最後の KEY と VALUE のペアにはカンマは必要ありません。

上記は手動で作成されていますが、データベース クエリからのループでこれを作成できます。上記のように手動で割り当てられた KEY 名をおそらくデータベースの列名に置き換えると、VALUE はおそらくフィールドのデータになります。

「配列から特定のデータを取得する」という質問については、配列をループして、各キーの値を変数にエコーまたは割り当てます。
例えば

foreach ($array as $key => $value)
  {
    echo "The ."$key." is ".$value;
  }

基本に関するいくつかのチュートリアルを読む必要があります。これは Q&A サイトです。質問がある場合はお手伝いしますが、コーディングについて質問する前に、コーディングの基本を理解する必要があります。
上記と同様に、答えは質問に対する答えではなく、Stack Exchange サイト、フォーラム、およびチュートリアルで既に見つけることができるガイドまたはチュートリアルです:)

于 2013-09-06T15:39:00.030 に答える
2

PHPの文字列配列の違いを誤解しています。この 2 つを区別することは重要です。あなたのデータは文字列形式であると仮定します。

救助への文字列操作!データに識別可能なパターンや形式がない場合、必要な情報を抽出することは困難です。文字列が常にセミコロンで始まり、test type:それに続く値が常にセミコロンで終わる場合、次のようにすることができます (理想的ではありませんが、単純です)。

$str = 'test type: human; Including all the test; number of participants 2 persons + additional  $50';
$testType = substr($str, 11, strpos($str, ';')-11); // 11 == len('test type: ')

同様に、文字列number of participantsに必要なデータの直前に常にテキストが含まれていて、そのデータの直後にスペースがある場合は、次を使用できます。

$start = strpos($str, 'number of participants') + 23;
$numPart = substr($str, $start, strpos($str, ' ', $start+1) - $start);

簡潔にするためにインデックスをハードコーディングしましたが、文字列検索関数 (特に正規表現) に簡単に置き換えることができます。

資力:

于 2013-09-06T15:40:42.033 に答える
1

データを個々のチャンクに分割し、次のように多次元配列に入れてみませんか。

$array[] = explode('; ', "test type: human; Including all the test; number of participants 2 persons + additional  $50");

これにより、次のことが得られます。

Array
(
    [0] => Array
        (
            [0] => test type: human
            [1] => Including all the test
            [2] => number of participants 2 persons + additional  $50
        )

)

最初の文字列の各セクションにキーとコロン (つまり、'key: some details') があると、次のように操作がさらに簡単になります。

$initial_data = explode('; ', "test type: human; Including: all the test; number of participants: 2 persons + additional  $50");
$clean_up = array();
foreach ($initial_data as $data) {
  $clean = explode(': ', $data);
  $clean_up[$clean[0]] = $clean[1];
}
$array[] = $clean_up;

これにより、配列は次のようになります。

Array
(
    [0] => Array
        (
            [test type] => human
            [Including] => all the test
            [number of participants] => 2 persons + additional  $50
        )

)
于 2013-09-06T15:59:43.047 に答える