【问题标题】:php array search valuephp数组搜索值
【发布时间】:2017-01-19 00:28:23
【问题描述】:
$arr = "数组
(
    [行业] => 数组
        (
            [0] => 汽车工业
            [1] => 汽车工业
            [2] => 餐厅
            [3] => 餐厅
            [4] => 餐厅
            [5] => 餐厅
            [6] => 汽车工业
            [7] => 汽车工业
            [8] => 餐厅
            [9] => 角色扮演游戏
            [10] => 自行车
            [11] => 汽车工业
            [12] => 汽车工业
            [13] => 汽车工业
            [14] => 汽车工业
            [15] => 餐厅
            [16] => 餐厅
            [17] => 餐厅
            [18] => 餐厅
            [19] => 汽车工业
            [20] => 汽车工业
            [21] => 餐厅
            [22] => 角色扮演游戏
            [23] => 自行车
            [24] => 汽车工业
            [25] => 汽车工业
        )

    [产品] => 数组
        (
            [0] => 摩托车
            [1] => 摩托车
            [2] => 炸薯条
            [3] => 肉丁
            [4] => 三明治
            [5] => 奶昔
            [6] => 摩托车
            [7] => Scooter_(摩托车)
            [8] => 汉堡包
            [9] => Champions_(role-playing_game)
            [10] => 自行车
            [11] => 踏板车_(摩托车)
            [12] => 踏板车_(摩托车)
            [13] => 摩托车
            [14] => 摩托车
            [15] => 炸薯条
            [16] => 肉丁
            [17] => 三明治
            [18] => 奶昔
            [19] => 摩托车
            [20] => 踏板车_(摩托车)
            [21] => 汉堡包
            [22] => Champions_(role-playing_game)
            [23] => 自行车
            [24] => 踏板车_(摩托车)
            [25] => 踏板车_(摩托车)
        )

    [iri] => 数组
        (
            [0] => http://dbpedia.org/resource/Hero_MotoCorp
            [1] => http://dbpedia.org/resource/Hero_MotoCorp
            [2] => http://dbpedia.org/resource/Hero_Certified_Burgers
            [3] => http://dbpedia.org/resource/Hero_Certified_Burgers
            [4] => http://dbpedia.org/resource/Hero_Certified_Burgers
            [5] => http://dbpedia.org/resource/Hero_Certified_Burgers
            [6] => http://dbpedia.org/resource/Hero_MotoCorp
            [7] => http://dbpedia.org/resource/Hero_MotoCorp
            [8] => http://dbpedia.org/resource/Hero_Certified_Burgers
            [9] => http://dbpedia.org/resource/Hero_Games
            [10] => http://dbpedia.org/resource/Hero_Cycles
            [11] => http://dbpedia.org/resource/Hero_MotoCorp
            [12] => http://dbpedia.org/resource/Hero_MotoCorp
            [13] => http://dbpedia.org/resource/Hero_MotoCorp
            [14] => http://dbpedia.org/resource/Hero_MotoCorp
            [15] => http://dbpedia.org/resource/Hero_Certified_Burgers
            [16] => http://dbpedia.org/resource/Hero_Certified_Burgers
            [17] => http://dbpedia.org/resource/Hero_Certified_Burgers
            [18] => http://dbpedia.org/resource/Hero_Certified_Burgers
            [19] => http://dbpedia.org/resource/Hero_MotoCorp
            [20] => http://dbpedia.org/resource/Hero_MotoCorp
            [21] => http://dbpedia.org/resource/Hero_Certified_Burgers
            [22] => http://dbpedia.org/resource/Hero_Games
            [23] => http://dbpedia.org/resource/Hero_Cycles
            [24] => http://dbpedia.org/resource/Hero_MotoCorp
            [25] => http://dbpedia.org/resource/Hero_MotoCorp
        )

)";

我想从上面的数组中搜索 wod 单词“摩托车”并获取iri http路径。

有什么帮助吗??

【问题讨论】:

    标签: php arrays search


    【解决方案1】:

    我查看了您提供的array,并想指出一些事实:

    • "Motorcycle" 在里面 "product"
    • "Motorcycle" 是重复的,所以我们需要能够确定我们要搜索哪个 "Motorcycle" 的前一个
    • "Motorcycle" 在多个位置以不区分大小写的方式显示为 substring

    所以,首先让我们实现一个函数,它会找到string 对应的iri。请注意,我们需要确定是否要搜索更多 iri 元素(如果它们是重复的)以及我们是否希望它区分大小写:

    function getIri($input, $str, $duplicates = false, $caseInsensitive = false) {
        $output = array();
        foreach ($input["iri"] as $element) {
            if (($caseInsensitive && (stripos($element, $str) >= 0)) ||
               (strpos($element, $str) >= 0)) {
                   $output[]=$element;
                   if (!$duplicates) {
                       return $output;
                   }
            }
        }
        return $output;
    }
    

    然后,您需要对product 执行相同操作:

    function getPreviousProductOf($input, $str, $duplicates = false, $caseInsensitive = false, $substring = false) {
        $output = array();
        //We start from 1, as the 0'th element does not have a previous
        for ($index = 1; $index < count($input["product"]); $index++) {
            if (($substring && $caseInsensitive && (stripos($input["product"][$index], $str) >= 0)) ||
               ($substring && !$caseInsensitive && (strpos($input["product"][$index], $str) >= 0)) ||
               (!$substring && $caseInsensitive && (strcasecmp($input["product"][$index], $str) === 0)) ||
               (!$substring && !$caseInsensitive && ($input["product"][$index] === $str))) {
                $output = array_merge($output, getIri($input, $input["product"][$index]), $duplicate, $caseInsensitive);
                if (!$duplicate) {
                    return $output;
                }
            }
        }
        return $output;
    }
    

    最后,你需要调用第二个function,像这样:

    var $result = getPreviousProductOf($input, "Motorcycle");
    

    【讨论】:

      【解决方案2】:

      你没有说是想要全部还是只想要第一个。

      $val = "Motorcycle";
      
      
      // only first
      $ind = array_search ( $val, $arr ["product"], true );
      if ($ind >= 0) {
          echo  $arr ["iri"] [$ind] . "<br>";
      }
      
      echo "<hr>" ;
      
      // all values
      foreach ( array_keys ( $arr ["product"], $val, true ) as $ind ) {
          echo $arr ["iri"] [$ind] . "<br>";
      }
      

      【讨论】:

        猜你喜欢
        • 2019-05-08
        • 2011-10-03
        • 2012-06-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-05-20
        相关资源
        最近更新 更多