php - 如何将数组中的 id 值替换为存储在另一个数组中的实际值?

标签 php arrays

我有两个关联数组,一个包含有关州(或省)的数据,另一个包含不同国家/地区的数据。我从关系数据库获取值,因此 states 数组不保存国家/地区名称,而是保存国家/地区 ID。

状态数组:

array(3) {
  array {
    'name' => 'Alabama',
    'country' => 1},
  array {
    'name' => 'Alberta',
    'country' => 2},
  array {
    'name' => 'Minnesota',
    'country' => 1}
}

国家数组:

array(2) {
    1 => 'United States',
    2 => 'Canada'
}

我想要的结果是:

array(3) {
  array {
    'name' => 'Alabama',
    'country' => 'United States'},
  array {
    'name' => 'Alberta',
    'country' => 'Canada'},
  array {
    'name' => 'Minnesota',
    'country' => 'United States'}
}

我搜索了又搜索,但没有找到可以回答这个特定问题的问题。我确信我不是唯一拥有此类数据的人;也许我没有在寻找合适的条款。我确实在我的国家模型类中编写了一个函数来解决这个问题,但我认为必须有一种更有效的方法。


我当前的解决方案(它有效,但可能有更好的方法,对吧?):

function replaceKeyValues($replaceArray,$replaceKey)
  {
  $countries = $this->get_countries();
  foreach ($replaceArray as &$itm) {
    if (isset($itm[$replaceKey])) {
      if (in_array($itm[$replaceKey], array_flip($countries))) {
        $itm[$replaceKey] = $countries[$itm[$replaceKey]];
      }
    }
  }
  return $replaceArray;
}

//called like this (for example)
$states = $this->Country->replaceKeyValues($states,'country');

编辑:我最终使用了 Jon 的建议,并且还稍微修改了原始函数,使其足够通用,以至于我不再需要在模型类中使用它。它现在位于我的一个帮助器类中,我添加了另一个输入参数,即“主数据”数组。希望这对某人有帮助:-)

function replaceKeyValues($masterArray,$replaceArray,$replaceKey)
{
    foreach ($replaceArray as &$itm) {
        if (isset($itm[$replaceKey])) {
            if (isset($masterArray[$itm[$replaceKey]])) {
                $itm[$replaceKey] = $masterArray[$itm[$replaceKey]];
            }
        }
    }
    return $replaceArray;
}

最佳答案

除了这个事实

if (in_array($itm[$replaceKey], array_flip($countries)))

写成这样会更好

if (isset($countries[$itm[$replaceKey]]))

事实上,嵌套条件可以取消嵌套,这已经足够基本了,没有真正的改进机会。

您当然可以将 foreach 替换为 array_walk 和 lambda,但这不会有任何“更好”。

关于php - 如何将数组中的 id 值替换为存储在另一个数组中的实际值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14539848/

相关文章:

php - mysql,从多个表中选择数据,表中没有公共(public)字段

php - 在 PHP 中从 WSDL 网络服务检索数据

PHP最便宜的方法如何检查远程图像是否存在

python - 列表按字母顺序而不是数字顺序排列

php - 简单的日期明智排序数组不起作用

php - 增加 php 的最大执行时间

php - 使用 LEFT JOIN 的 Doctrine 2 UPDATE

java - 是否可以创建一个 int 名称变量数组

php - 向 PHP 中的每个数组键添加一个字符

arrays - 从 golang 中的 redash 解码 json 原始数据