我有阵列问题。这是我的阵列:
$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;
}
答案 0 :(得分:1)
你错了阵列的形状。
"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];
}
如果您还需要访问类别(酒店,航班,m& a ......),并按照我的建议对形状进行整形,那么很简单: - )
$categories = array_unique($servicesTypes);
答案 1 :(得分:1)
这是因为以下数组初始化:
$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中的多个元素。但是,这是不可能的。
编辑 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
是一个字符串,则为:
答案 2 :(得分:0)
您已经错误地格式化了数组并且代码随之更改(= [ ]
相当于= 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');
答案 3 :(得分: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; }