【问题标题】:PHP numeric array orderPHP数字数组顺序
【发布时间】:2016-10-17 16:00:02
【问题描述】:

我有一个数组并想创建一个新的数值数组。这看起来像这样:

$created_old = explode("_", $result[$i]["created"]);
$created_new = array();
$created_new[0] = $created_old[2];
$created_new[1] = $created_old[0];
$created_new[2] = $created_old[1];
$created_new[3] = "";
$created_new[4] = rtrim(explode(":", $created_old[3])[2], ")");

//Get name from the database

$created_new[3] = $name;

$created = implode("_", $created_new);

这个版本运行得很好,但是前一个版本少了一行,所以代码是这样的:

$created_old = explode("_", $result[$i]["created"]);
$created_new = array();
$created_new[0] = $created_old[2];
$created_new[1] = $created_old[0];
$created_new[2] = $created_old[1];
//$created_new[3] = ""; - I am missing
$created_new[4] = rtrim(explode(":", $created_old[3])[2], ")");

//Get name from the database

$created_new[3] = $name;

$created = implode("_", $created_new);

在第二个代码中,字符串$created 的顺序错误。索引 4 和 3 被切换。如果它是一个关联数组,我会理解这一点,但由于它是一个数字数组,我假设索引以数字方式增加并且像这样排序。由于我有一个工作版本,因此我不需要帮助来修复此代码,而是了解代码为何如此运行...

最好的问候 JRsz

【问题讨论】:

  • php 中没有任何numeric 数组。所有都是关联的。
  • 这与我的问题无关,因此我没有发布它:仅供参考是我从数据库中读取的字符串,其格式如下:123_123_123_abc:(abc:123)
  • $created_new = array_fill(0, 5, ''); 初始化应该可以解决您的问题。

标签: php arrays indexing numeric implode


【解决方案1】:

所有 PHP 数组都是关联的。口语中没有“数字数组”这样的东西。键可以是字符串或数字,没关系。键仍然按其插入顺序排序,并且从不按其值隐式排序。你不会对我假设的这种行为感到惊讶:

$arr['a'] = 1;
$arr['c'] = 3;
$arr['b'] = 2;
// ['a' => 1, 'c' => 3, 'b' => 2]

完全相同的机制在您的“数字数组”中起作用。

如果你想对你的键进行排序,你需要明确地使用ksort

【讨论】:

  • 是的。可以使用print_r($created_new)查看数组内容。
  • 好吧,我想我必须忍受它。虽然这有点奇怪,但我会在以后的工作中牢记这一点。谢谢你:)
  • @JRsz 其他语言有单独的数字索引列表键值映射; PHP 将它们合并为一种类型的关联有序键值映射
  • 你不必忍受它。您可以使用ksort明确按照您期望的顺序排列您的密钥
  • 确实如此,但如果我以我需要的方式创建它,那么我就没有这个开销。因此,就性能而言,只需牢记这一点:D
猜你喜欢
  • 2013-03-18
  • 1970-01-01
  • 1970-01-01
  • 2021-11-10
  • 1970-01-01
  • 2010-12-12
  • 2019-04-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多