我需要创建一个数组,其中绑定了载波名称和id。然后我想执行一些类似get_carrier_name_by_id(id)
的操作,返回运营商名称。
$carriers = array (
"DPD" => array(1,2,3),
"DPD Pobranie" => array(4,5,6),
"Poczta-Polska" => array(7,8,9),
"Poczta-Polska pobranie" => array(10,11,12),
"Paczkomat" => array(13,14,15),
"Paczkomat pobranie" => array(16,17,18),
"Osobisty" => array(19,20,21),
"UPS" => array(22,23,24),
"UPS pobranie" => array(25,26,27)
);
这是保存数据的正确方式吗?
试试这个:
function get_carrier_name_by_id($id)
{
$carriers = array (
"DPD" => array(1,2,3),
"DPD Pobranie" => array(4,5,6),
"Poczta-Polska" => array(7,8,9),
"Poczta-Polska pobranie" => array(10,11,12),
"Paczkomat" => array(13,14,15),
"Paczkomat pobranie" => array(16,17,18),
"Osobisty" => array(19,20,21),
"UPS" => array(22,23,24),
"UPS pobranie" => array(25,26,27)
);
foreach($carriers as $name => $ids)
if(in_array($id, $ids))
return $name;
return null;
}
echo '<pre>';
var_dump(get_carrier_name_by_id(122));
var_dump(get_carrier_name_by_id(12));
var_dump
s的输出:
NULL
string(22) "Poczta-Polska pobranie"
看看数组迭代器。
下面是使用迭代器的解决方案:
function get_carrier_name_by_id($id)
{
$carriers = array(
"DPD" => array(1, 2, 3),
"DPD Pobranie" => array(4, 5, 6),
"Poczta-Polska" => array(7, 8, 9),
"Poczta-Polska pobranie" => array(10, 11, 12),
"Paczkomat" => array(13, 14, 15),
"Paczkomat pobranie" => array(16, 17, 18),
"Osobisty" => array(19, 20, 21),
"UPS" => array(22, 23, 24),
"UPS pobranie" => array(25, 26, 27)
);
$it = new RecursiveIteratorIterator(new RecursiveArrayIterator($carriers));
foreach ($it as $key => $val) {
$key = $it->getSubIterator($it->getDepth() - 1)->key();
if($val == $id){
return $key;
}
}
}
echo get_carrier_name_by_id(3); //Output: DPD
echo get_carrier_name_by_id(12); //Output: Poczta-Polska pobranie
echo get_carrier_name_by_id(24); //Output: UPS
您可以使用array_filter()
、in_array()
和key()
:轻松获得运营商名称
$key = 4;
$carrier = key( array_filter( $carriers, function( $row ) use( $key ) { return in_array( $key, $row ); } ) );
echo $carrier;
将输出:
DPD Pobranie
基本上,您必须将$carriers
数组筛选为匹配的$key
。您可以将array_filter
与匿名函数一起使用:array_filter
将每个数组元素传递给被调用的函数,如果该函数返回可评估为True的值,则该元素将在筛选的数组中返回,否则将被丢弃。在您的情况下,我们会检查元素项中是否存在请求的密钥。
然后,我们使用key()
返回已过滤数组的当前指向元素的键:数组刚刚创建,因此指针位于数组的开头。
如果你想的话,你可以将这个脚本改编成一个函数:
function CarrierByID( $carriers, $key )
{
return key( ... );
}