【问题标题】:PHP - array search get key valuePHP - 数组搜索获取键值
【发布时间】:2012-06-02 18:25:18
【问题描述】:

我有一个数组如下,

$country = array ("01. USA","02. Russia","03. UK","04. India");

我只是想用这个字符串$str = "USA"; 搜索我的数组,它应该返回值所在的键。那可能吗。我尝试使用array_search(),但它不起作用。

更新:

实际的数组有,

Array ( [0] => 01. Australian Dollar [1] => 06. Swedish Kroner [2] => 02. British Pound Sterling [3] => 07. Swish Frank [4] => 03. Canadian Dollar [5] => 08. U.S. Dollar [6] => 04. Japanese Yen Per 100 [7] => 09. Euro [8] => 05. Singapore Dollar [9] => 10. Taka Per 100 )

【问题讨论】:

  • “不起作用”?尝试后会发生什么?
  • 只能手动,没有内置功能
  • @ChrisW 只是得到一个空屏幕。
  • 你试过array_walk()吗?
  • 您可以尝试使用preg_matcharray_search(),使用像/USA$/ 这样的正则表达式语句

标签: php arrays search


【解决方案1】:

您可以使用这里描述的 preg-grep preg_grep

然后你应该把 preg_grep 的结果放到 array_search 中。

$results = preg_grep($pattern, $input);
$indices = array();
foreach ($results as $result) {
   $indices[] = array_search($result, $input);
}

【讨论】:

  • 也许吧?你是在猜还是在回答?
【解决方案2】:

如果您希望在没有任何键的情况下保留当前结构(这不是最佳解决方案)。您可以执行以下操作:

$countries = array (
                    "01. USA",
                    "02. Russia",
                    "03. UK",
                    "04. India"
                   );

$input  =  'UK';
$output =  '';
foreach ($countries as $country){
     $found = strpos($country,$input);
     if ($found > 0){  // assuming $country wouldn't start with country name.
         $output = trim(substr($country,0,$found-1));
         break;
     }
}

但是,我相信大家会建议你使用数组中的键。

【讨论】:

    【解决方案3】:

    如果包含 strstr(),你可以尝试 foreach 值测试。

        foreach ($country as $n => $state)
        {
            if (strstr($state, 'USA'))
            {
                //found
                break;
            }
        }
    

    【讨论】:

    • 去掉关于大数组的部分,加上break和key,这将是一个理想的答案,+1
    • 但是如果他在大数组(超过一千个值)上使用它,则需要更多时间来处理它不是吗?
    • @sczdavos:但您仍然需要执行该工作。你会对你的老板说什么 - 数组太大了,我不会那样做?
    • @zerkms 不,我只想说,这将需要更多时间来处理大型阵列。所以如果我需要使用这个解决方案,我应该知道对于大数组可能需要一些时间。
    【解决方案4】:
    $search = "USA";
    $country = array ("01. USA","02. Russia","03. UK","04. India");
    foreach($country as $key=>$cnt){
       if(strpos($cnt,$search)){
          echo "String found in position $key";
          break;
       }
     }
    

    您可以用这种方式编写代码。但它也会返回 true 如果您的搜索字符串也是“US”....

    【讨论】:

      【解决方案5】:
      $str = 'USA';
      foreach ($country as $k => $v) {
        if (strpos($v, $str) !== FALSE)
          break;
      }
      
      echo $k; // will print: 0
      

      【讨论】:

      • 在 $country 中找不到 $str 时失败!
      • @DelPedro:伙计,你是对的!但我懒得更正代码。让选择的回答者解决这个问题:)
      【解决方案6】:

      您没有在示例中设置任何键,这意味着键会自动分配一个从 0 到 3 的值。如果您要搜索“,则数组中不存在值“USA” 01. USA”,那么您将获得值 0(零),因为它是数组中具有自动分配键的第一个值。

      在这个数组上搜索“USA”,它可能会给你预期的结果:

      $country = array (1 => "USA", 2 => "Russia", 3 => "UK", 4 => "India");

      您需要使用key => value 正确分配键和值。除了1 => "USA",您还可以使用"01" => "USA",这将为美国提供密钥“01”。

      【讨论】:

      • 但仍未得到答复。如果他从 3rd 方数据源获取此类数据怎么办?
      • 啊,对不起,我以为问题出在钥匙上。阅读了他的编辑后,我明白了这个问题。
      猜你喜欢
      • 2019-09-20
      • 2015-03-24
      • 2011-01-30
      • 2023-04-11
      • 2014-03-23
      • 1970-01-01
      • 1970-01-01
      • 2017-01-13
      • 1970-01-01
      相关资源
      最近更新 更多