当前位置: 首页 > 知识库问答 >
问题:

如何按值获取数组键?

闻人博
2023-03-14

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

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

对于我发送的每一个“类型”,我都试图找到钥匙(“酒店”、“航班”等)

大多数时候我都会得到它,但对于某些值,我会得到:“key: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;
}

共有3个答案

匡晟
2023-03-14

您将数组的格式设置得有点错误,代码也随之更改(=[]相当于=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');
朱翔
2023-03-14

您对阵列形状的认识是错误的。

  "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\u service\u type变得非常简单,不再需要函数:

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

如果您还需要访问类别(酒店,航班,m

$categories = array_unique($servicesTypes);
安明亮
2023-03-14

这是因为在以下阵列初始化中:

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

除了HTPHT之外,您可以为所有值分配字符串键。默认情况下,PHP为这些项分配了键,它们是01,等等。

似乎您希望在PHP中为多个元素分配相同的键。然而,这是不可能的。

如果可以为每个键分配一个值数组,请编辑下面注释中询问的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;
}

以上功能的作用:

  • 循环通过$servicesArray
  • 如果$service是一个数组:
    • 遍历$service
    • 如果找到匹配,返回密钥。
    • 如果找到匹配项,请返回密钥

 类似资料:
  • 问题内容: 如何获得数组中唯一值的列表?我是否总是必须使用第二个数组,或者是否有类似于JavaScript中Java哈希表的东西? 我将仅使用 JavaScript 和 jQuery 。不能使用其他库。 问题答案: 由于我在@Rocket答案的注释中继续进行了讨论,因此我不妨提供一个不使用任何库的示例。这需要两个新的原型函数,并且 为了提高可靠性,可以用MDN的垫片代替,并检查每个元素的值是否等于

  • 问题内容: 我有一个数组叫做 我需要从该数组中获取一个随机值并将其存储在变量中,我该怎么做? 问题答案: 您还可以执行以下操作: 当您有关联数组时,这就是这样做的方法。

  • 我对编程很陌生,我想做一个程序,用不同的变量发出12张卡片,然后将每张完整的卡片存储在某个地方供以后使用: N=Number(卡片上的数字,可以从1到3) C=Color(卡片是什么颜色,绿色、蓝色或红色) F=Form(有3种形式:蛇、时钟和圆) R=Fill(可以是满的、半的或空的) 这是我到目前为止得到的:

  • 我有个问题。我想从复选框中获取复选值,并将它们添加到php数组中,但我对如何做到这一点没有任何线索。我可以用javascript做,但我想要一个php数组,我不知道如何将js数组转换为php数组。我将在下一个php文件中使用数组,并用这些值从数据库中搜索行。如果有人建议我怎么做,我会很感激,因为我没有任何线索。 这就是我如何使复选框,然后单击按钮,我移动到下一个文件

  • 问题内容: 我有一个像这样的数组: 如果用户将“ Designation2”作为输入,则代码应返回。 这可能是一个非常简单的问题,但是我是Java的新手。因此,请提出一些建议。 问题答案: 您可以遍历数组中的字符串,并找到与您要查找的字符串匹配的索引。

  • 如果条件匹配,我想从多数组中获取变量的特定值。 打印阵列时: 给出如下数组: 如果ID与21匹配,我正在尝试获取客户号码