繁体   English   中英

如何通过值获取数组键?

[英]How to get array key by value?

我有阵列的问题。 这是我的数组:

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

对于我发送的每种“类型”,我都会尝试输入钥匙(“酒店”,“航班”等)

大多数时候,我得到了它,但是对于某些值,我得到了:“键:0”

即时,如果类型=“ 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;
}

您对数组的形状有误。

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

您认为这是一个数组元素,但实际上是3个元素(数组元素用逗号分隔)。 当您不为数组元素提供键时,PHP为您选择一个键,从索引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];
}

如果您还只需要访问类别(酒店,航班,并购...),并且按照我上面的建议对阵列进行了整形,则很容易:-)

$categories = array_unique($servicesTypes);

这是因为在以下数组初始化中:

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

您将字符串键分配给除HTPHT以外的所有值。 这些项被分配默认密钥由PHP,其是01 ,依此类推。

似乎您想将相同的键分配给PHP中的多个元素。 但是,这是不可能的。


EDIT OP在下面的注释中询问是否可以为每个键分配一个值数组。 这是可能的,但是它将使搜索功能更加复杂。

即,像这样的数组:

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

其中的值可以是字符串或数组 ,可以使用这样的get_service_function()找到(清理了一下):

function get_service_type ($servicesArray, $type) {
    foreach($servicesArray as $key => $service)
        if ( is_array($service) ) {
            foreach($service as $value)
                if($type == $value)
                    return $key;
        } else if ( $service == $type )
            return $key;
    return false;
}

以上功能的作用:

  1. 通过$servicesArray循环
  2. 如果$service是一个数组:
    • 遍历$service
    • 如果找到匹配项,则返回密钥。
  3. 否则,如果$service是字符串:
    • 如果找到匹配项,则返回密钥。
  4. 如果不匹配,则返回false。

您对数组的格式设置有误,并更改了代码( = [ ]等于= array( ) ):

$servicesTypes = [
    'hotel' => [
        'HTL',
        'HTP',
        'HT'
    ],
    'flight' => [
        'FLT'
    ],
    'm&a' => [
        'APA'
    ],
    'daily_tour' => [
        'TOU'
    ],
    'private_car' => [
        'PRC'
    ],
    'transfer' => [
        '4ST'
    ],
];

function get_service_type ($servicesArray, $type)
{

    foreach($servicesArray as $key => $services)
    {
        foreach ($services as $service)
        {
            if ($service == $type)
            {
                return $key;
            }
        }
    }
    return false;
}

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

函数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; }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM