繁体   English   中英

PHP-通过多维数组从另一个键值获取键

[英]PHP - Get key from another key value through a multi dimensional array

我有以下通过API获得的多维数组。

$exchangeID = array(
    0 => array(
        'id' => 'vcxz', 
        'currency' => 'GBP',
        ),
    1 => array(
        'id' => 'mnbv',
        'currency' => 'EUR',
        ),
    2 => array(
        'id' => 'lkjh',
        'currency' => 'USD', 
        ),
    3 => array(
        'id' => 'poiuy',
        'currency' => 'KRN',
        ),
    );

我想获取USD的标识 lkjh 我知道可以通过简单地执行$ exchangeID [2] ['id']来实现。 问题在于数组是动态的。 例如,在加载时,第一个子数组可能是EUR而不是GBP,而第三个子数组可能是KRN而不是USD。

基本上,我要记住的是先查找有货币的子数组,然后相应地找到相应的ID。 例如,如果我想找到欧元。 首先,我找到欧元,然后得到“ mnbv”。

我尝试了这个$key = array_search('USD', array_column($exchangeID, 'currency')); 但是我在error_log PHP Fatal error: Call to undefined function array_column()遇到以下错误PHP Fatal error: Call to undefined function array_column()至少获取数组编号,例如在这种情况下为2。

您可以简单地过滤数组,如下所示:

$usd_exchanges = array_filter($exchangeID, function($row) {
  return $row['currency'] == "USD";
}));
var_dump($usd_exchanges[0]);

您还可以使用current方法返回过滤器的第一个元素:

$usd_exchange = current(array_filter($exchangeID, function($row) {
  return $row['currency'] == "USD";
})));
var_dump($usd_exchange);
foreach($exchangeID as $key=>$value)
    {
        if($exchangeID[$key]['currency']=='USD'){
            $usdId=$exchangeID[$key]['id'];
      break;
        }
    }
//echo $usdId; 
//Result:ikjh

尝试这个:

foreach ($exchangeID as $key => $arr)
  if($arr['currency'] == 'USD')
    echo $key;

可以使用以下自定义函数来获取密钥:

echo getKeyRecursive('USD', $exchangeID);
function getKeyRecursive($needle, $haystack, $strict = false)
{
  foreach ($haystack as $key => $item){
     if(($strict ? $item === $needle : $item == $needle) || (is_array($item) && getKeyRecursive($needle, $item, $strict))) return $key;
  }
  return false;
}
<?php
$exchangeID = array(
    0 => array(
        'id' => 'vcxz', 
        'currency' => 'GBP',
        ),
    1 => array(
        'id' => 'mnbv',
        'currency' => 'EUR',
        ),
    2 => array(
        'id' => 'lkjh',
        'currency' => 'USD', 
        ),
    3 => array(
        'id' => 'poiuy',
        'currency' => 'KRN',
        ),
    );
$db=new PDO('sqlite::memory:','','',array(PDO::ATTR_EMULATE_PREPARES => false, PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
$db->query('CREATE TABLE `troll` (`dbid` TEXT, `dbcurrency` TEXT);');
$stm=$db->prepare("INSERT INTO `troll` (`dbid`,`dbcurrency`) VALUES(:id,:currency);");
array_walk($exchangeID,function($arr)use($stm){$stm->execute($arr);});
$res=$db->query("SELECT `dbid` AS `id` FROM `troll` WHERE `dbcurrency` = ".$db->quote('USD').' LIMIT 1');

$id=$res->fetch(PDO::FETCH_ASSOC);
$id=$id['id'];
var_dump($id);

在这里查看工作示例http://codepad.viper-7.com/1lg2Gj

如果可行,请尝试以下方法:

  foreach($exchangeID as $key => $val)
  {
      if(array_key_exists('currency', $val))
        if($val['currency'] == 'USD'){
          echo $val['id'];
          echo $val['currency'];
        elseif($val['currency'] == 'GBP'){a1
           echo $val['id'];
          echo $val['currency']);
       elseif($val['currency'] == 'EUR'){
          echo $val['id'];
         echo $val['currency'];
         }else{
          echo $val['id'];
         echo $val['currency'];
       }
    }
  }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM