如何按值获取数组键?
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"
);
对于我发送的每个 "type",我都在尝试获取密钥("hotel"、"flight" 等)
大多数时候我都明白,但对于某些值我得到:"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;
}
你对数组的形状有误。
"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"
);
您将字符串键分配给除 HTP
和 HT
之外的所有值。这些项目默认由 PHP 分配密钥,即 0
、1
等。
您似乎想为 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;
}
以上函数的作用:
- 遍历
$servicesArray
- 如果
$service
是一个数组:
- 遍历
$service
.
- 如果找到匹配项,return 密钥。
- 否则如果
$service
是一个字符串:
- 如果找到匹配项,return 密钥。
- 如果不匹配,return 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;
}
}
}
return 错误;
}
我有数组问题。这是我的数组:
$servicesTypes = array (
"hotel" => "HTL", "HTP", "HT",
"flight" => "FLT",
"m&a" => "APA",
"daily_tour" => "TOU",
"privat_car" => "PRC",
"transfer" => "4ST"
);
对于我发送的每个 "type",我都在尝试获取密钥("hotel"、"flight" 等)
大多数时候我都明白,但对于某些值我得到:"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;
}
你对数组的形状有误。
"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"
);
您将字符串键分配给除 HTP
和 HT
之外的所有值。这些项目默认由 PHP 分配密钥,即 0
、1
等。
您似乎想为 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;
}
以上函数的作用:
- 遍历
$servicesArray
- 如果
$service
是一个数组:- 遍历
$service
. - 如果找到匹配项,return 密钥。
- 遍历
- 否则如果
$service
是一个字符串:- 如果找到匹配项,return 密钥。
- 如果不匹配,return 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;
}
}
}
return 错误; }