Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 获取多维数组中的键_Php_Arrays_Multidimensional Array - Fatal编程技术网

Php 获取多维数组中的键

Php 获取多维数组中的键,php,arrays,multidimensional-array,Php,Arrays,Multidimensional Array,我需要创建一个包含运营商名称和绑定到它们的ID的数组。然后我想执行一些类似于get\u carrier\u name\u by\u id(id)what将返回carrier name $carriers = array ( "DPD" => array(1,2,3), "DPD Pobranie" => array(4,5,6), "Poczta-Polska" => array(7,8,9), "Poczta-Polska pobranie"

我需要创建一个包含运营商名称和绑定到它们的ID的数组。然后我想执行一些类似于
get\u carrier\u name\u by\u id(id)
what将返回carrier name

$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));
看一看

使用迭代器查看以下解决方案:

$key = 4;
$carrier = key( array_filter( $carriers, function( $row ) use( $key ) { return in_array( $key, $row ); } ) );
echo $carrier;

您可以使用和轻松获取运营商名称:

将输出:

DPD-Pobranie
基本上,您必须过滤
$carriers
数组以匹配
$key
。可以与:
array\u过滤器一起使用
将每个数组元素传递给被调用的函数,如果该函数返回一个可计算为True的值,则该元素将返回到已过滤的数组中,否则将被丢弃。在您的情况下,我们检查元素项中是否存在请求的键

然后,我们使用返回过滤数组的当前指向元素的键:数组刚刚创建,因此指针位于数组的开头

如果需要,可以将此脚本改编为函数:


您所描述的内容也称为映射、关联数组或字典,是存储数据的合法方式。它也是PHP中的核心数据结构。
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
$key = 4;
$carrier = key( array_filter( $carriers, function( $row ) use( $key ) { return in_array( $key, $row ); } ) );
echo $carrier;
function CarrierByID( $carriers, $key )
{
    return key( ... );
}