【问题标题】:Remove key from mixed array and reindex从混合数组中删除键并重新索引
【发布时间】:2017-09-14 01:53:33
【问题描述】:

我是 php 的 postgresql 新手。我使用 pg_fetch_array() 函数得到下面的数组。

Array
(
    [0] => 
    [name] => 
    [1] => 1
    [status] => 1
    [2] => C2005
    [code] => C2005
)

在删除索引1 和键值status 之后,我必须重新索引这个数组,以便预期的输出应该变成这样:

Array
(
    [0] => 
    [name] => 
    [1] => C2005
    [code] => C2005
)

我试过了

unset($row[1]);
unset($row['status'];
$foo = array_values($row);
echo "<pre>";
print_r($foo)
echo "</pre>";

得到输出

Array
(
    [0] => 
    [name] => 
    [2] => C2005
    [code] => C2005
)

从数组中删除特定键后如何重新索引数字索引?

【问题讨论】:

  • 使用 pg_fetch_assoc() 而不是 pg_fetch_array() 那么你不会得到数字索引的列,它只会返回命名的列
  • 或者使用pg_fetch_array($result, NULL, PGSQL_ASSOC); 来获取关联数组
  • 为什么不只在选择语句中选择name, code
  • array_values 如何返回关联数组?它必须返回数值数组
  • 由于这是现有的实时应用程序代码,所以我无法进行任何进一步的更改。由于某种原因,字段状态被注入主查询,但稍后需要从结果中删除。有什么方法可以在删除特定键值后重新索引数组?

标签: php arrays postgresql reindex array-key


【解决方案1】:

您可以通过它们的键过滤数组。 Live demo

unset($array['status']);
$number_keys = array_values(array_filter($array, function($k){return is_int($k) && $k != 1;}, ARRAY_FILTER_USE_KEY));
$nonnumber_keys = array_filter($array, function($k){return is_string($k);}, ARRAY_FILTER_USE_KEY);
$result = array_merge($number_keys, $nonnumber_keys);

【讨论】:

  • 它不起作用。在用我的数组变量替换示例中的 $array 后,我打印了 $result
  • 成功了!!感谢提供现场演示。我观察到我遗漏了一些东西。但现在你的解决方案对我有用。
猜你喜欢
  • 2012-08-26
  • 1970-01-01
  • 2015-04-09
  • 1970-01-01
  • 2012-01-08
  • 2011-03-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-27
相关资源
最近更新 更多