PHP循环并返回多维数组的$key

标签 php arrays loops multidimensional-array foreach

我正在尝试编写一个 PHP 函数来循环到一个多维数组中以将其与企业名称相匹配,然后返回给我“企业类型”。

以我目前的技能,我编写了这个函数,但我想知道除了循环两次之外是否有更好的解决方案,因为我的实际数组比下面的示例大得多。

注意:我是一名学生,我已经搜索过 StackOverflow 但找不到我需要的。

function find_business_type($dealer_name) {
    $business_type = [
        "OEM"               => ["kia", "mercedes"],
        "Rent"              => ["rent", "rent-a-car"],
        "Workshop"          => ["shop", "workshop"],
        "Spare Parts"       => ["spare", "parts", "part"],
        "General Trading"   => ["gen", "general"]
    ];

    foreach ($business_type as $key => $values) {
        foreach ($values as $value) {
            if (strpos($dealer_name, $value) !== false) {
                return $key;
            }
        }
    }
}


$my_dealer = "super-stars-123 rent a car";
echo find_business_type($my_dealer);

Output: "Rent"

最佳答案

这是一个想法。本质上,您可以过滤数组并根据百分比获取与您的字符串匹配的所有行。注意 array_filter将返回一个包含所有匹配值的数组,而不仅仅是一个匹配项。

    <?php

$dealer = "super-stars-123 rent a car";

$types = [
        "OEM"               => ["kia", "mercedes"],
        "Stars"             => ["super-stars", "123"],
        "Brown"             => ["super stars", "abc"],
        "Home"              => ["think rent", "123"],
        "Super"             => ["renter", "car"],
        "Rent"              => ["rent", "rent-a-car"],
        "Workshop"          => ["shop", "workshop"],
        "Spare Parts"       => ["spare", "parts", "part"],
        "General Trading"   => ["gen", "general"]
    ];

// Filter through your array
$results = array_filter($types, function($type) use ($dealer) {
    // explode your inner array to a string and then try to match it
    // to your search dealer text. This returns a % match.
    // I would play around with this algo logic below to get it to do what you want.
    return (similar_text($dealer, implode(", ",$type), $percent) >= 8);
});

var_dump($results);   

 array (size=4)
  'Stars' => 
    array (size=2)
      0 => string 'super-stars' (length=11)
      1 => string '123' (length=3)
  'Brown' => 
    array (size=2)
      0 => string 'super stars' (length=11)
      1 => string 'abc' (length=3)
  'Super' => 
    array (size=2)
      0 => string 'renter' (length=6)
      1 => string 'car' (length=3)
  'Rent' => 
    array (size=2)
      0 => string 'rent' (length=4)
      1 => string 'rent-a-car' (length=10)

关于PHP循环并返回多维数组的$key,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48788433/

相关文章:

PHP Select 语句需要快速更正

c - 为什么这段代码在输入和输出行之间打印一个随机字符?

javascript - 使用 javascript 比较两个数组并查找每个值的计数

C++ 列表循环

javascript - 使用 AJAX 自动更新

php - 我想从一个 php 文件中获取包含 mysql 查询的变量,并编写将在另一个 php 文件中打印查询内容的循环

java - JOptionPane 或更好的解决方案

java - 如何延迟一个 while 循环?

php - 如何只左连接一张表?

JavaScript - 将数组分成具有随机数量对象的组