1

配列の問題があります。これは私の配列です:

$servicesTypes = array (
    "hotel"         => "HTL", "HTP", "HT",
    "flight"        => "FLT",
    "m&a"           => "APA",
    "daily_tour"    => "TOU",
    "privat_car"    => "PRC",
    "transfer"      => "4ST"
    );  

送信する「タイプ」ごとに、キー(「ホテル」、「フライト」など)に到達しようとしています

ほとんどの場合、私はそれを取得しますが、一部の値については「キー:0」を取得します

たとえば、type = "HTP" の場合、そのキーは 0 になり、"HT" の場合、キーは "1" になります。

何故ですか?

これは私のコードです:

function get_service_type ($servicesArray, $type)
{
    $key = array_search($type, $servicesArray);
    echo "key: ".$key;
    return $key;
}

私もこれを試しました:

function get_service_type ($servicesArray, $type)
{

    foreach($servicesArray as $key => $service)
    {

        if ( $service == $type )
        {
            echo "key: ".$key;
            return $key;
        }
    }
   return false;
}
4

4 に答える 4

1

配列の形状について間違っています。

  "hotel"   => "HTL", "HTP", "HT",

これは 1 つの配列要素だと思いますが、実際には 3 つの要素です (配列要素はコンマで区切られています)。配列要素にキーを指定しない場合、PHP は index から始まるキーを選択し0、次に1...

したがって、get_service_type()関数は期待どおりに機能します。

以下のあなたのコメントに応えて:

タイプ (例: ) がわかっているHTPため、カテゴリ (例: ) を見つける必要があるためHotel、最も簡単な方法は、配列の作成方法を変更することです。キーを使用して、知っている情報を保存します。例えば:

[
    'HTL' => 'hotel',
    'HTP' => 'hotel',
    'HT' => 'hotel',
    'FLT' => 'flight',
    'APA' => 'm&a',
    ...
]

次に、get_service_type関数が本当に必要なくなるほど単純になります。

function get_service_type ($servicesTypes, $type){
    return $servicesTypes[$type];
}

カテゴリ (ホテル、フライト、m&a...) だけにアクセスする必要があり、上記で推奨するように配列を形成する場合は、簡単です :-)

$categories = array_unique($servicesTypes);
于 2016-08-09T13:03:54.563 に答える
0
$servicesTypes = array (
"hotel"         => array("HTL", "HTP", "HT"),
"flight"        => "FLT",
"m&a"           => "APA",
"daily_tour"    => "TOU",
"privat_car"    => "PRC",
"transfer"      => "4ST"
); 

function get_service_type ($servicesArray, $type) {

foreach($servicesArray as $key => $service)
{
    if(is_array($service))
    {
        if(in_array($type,$service))
            return $key;
    }else
    {
         if ( $service == $type )
        {
           echo "key: ".$key;
           return $key;
        }
    }
}

false を返します。}

于 2016-08-09T13:17:22.130 に答える