[英]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"
);
您将字符串键分配给除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
。 $service
是字符串:
您对数组的格式设置有误,并更改了代码( = [ ]
等于= 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.