【问题标题】:PHP array_column multiple keys same order?PHP array_column多个键相同的顺序?
【发布时间】:2016-11-25 12:55:40
【问题描述】:

我想知道 array_column 是否保持数组元素的顺序,所以当我在同一个数组中调用该函数两次时,我可以相信结果数组会匹配。我需要以这种方式工作,因为在代码中我必须仅使用特定数据(其中一个键,在示例中为 id)进行许多操作,毕竟,使用它们(例如 id 和 qty)来插入数据库。

例子:

QUERY: SELECT id, qty FROM items ...
CONVERTED INTO ASSOCIATIVE ARRAY:
$array = [
  ['id' => 1, 'qty' = 2],
  ['id' => 2, 'qty' = 4]
];

$itemsIds = array_column($array, 'id');
$itemsQty = array_column($array, 'qty'); 

我可以吗?:

for($i = 0; $i < count($array); $i++) {
  echo $itemsIds[$i] . $itemsQty[$i];
}

而且我总是会得到每个项目的正确数据?

【问题讨论】:

  • 不太确定你想用上面的代码完成什么,如果你能解释你想做什么可能会有所帮助。简而言之,答案是否定的,因为您使用的是array_unique,它正在剥离重复值,这意味着您的两个数组可能是两个不同的长度。
  • 为什么不直接通过查询得到它?
  • array_unique() 是一个问题,因为之后数组的长度可能不同。而且似乎没有任何理由去做你正在做的事情。你能解释一下吗?
  • 是的,我确实没有意识到在我包含的代码中我还编写了 array_unique 函数,这显然可以改变游戏规则。不,我不能在同一个循环中使用两个键,因为程序的流程。

标签: php sorting associative-array


【解决方案1】:

从您的代码看来,在您使用 array_column 两次后,您似乎希望保持与其值正确对应的键。

但是对于您的信息,您可以像这样使用array_column 得到这个:

$items = array_column($array, 'qty', 'id')

现在你得到一个关联数组,其中键是每行 id,值是每行 qty。

array_column第三个参数的含义是

用作返回数组的索引/键的列。该值可能是该列的整数键,也可能是字符串键名。

您可以从文档中找到更多解释和示例:http://php.net/manual/en/function.array-column.php

【讨论】:

    【解决方案2】:

    由于数据库结果是基于行的(通常),每一列都会有一些值(即使它是NULL)。因此,除非您以某种方式弄乱结果,否则您应该是安全的。在我的一些代码中,我的做法几乎相同。

    【讨论】:

      【解决方案3】:

      如果您通过 SQL 查询获得所需的所有值并使用以下内容打印出来会怎样:

      $arrayLength = count($array); // Better optimization than do it in every loop
      for($i = 0; $i < $arrayLength; $i++) {
        echo $array[$i]['id'] . $array[$i]['qty'];
      }
      

      这将确保所有与所有匹配,并且它们具有相同数量的行。

      【讨论】:

        猜你喜欢
        • 2015-01-28
        • 2014-05-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-04-09
        • 2021-10-26
        相关资源
        最近更新 更多