PHP array_column多个键的顺序是一样的吗?

时间:2016-07-21 19:13:36

标签: php sorting associative-array

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

示例:

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];
}

我会始终为每个项目获取正确的数据吗?

3 个答案:

答案 0 :(得分:2)

从您的代码中,您似乎想在使用array_column两次后保持与其正确对应的键。

但是对于您的信息,您只需使用array_column就可以获得此信息:

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

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

第三个参数array_column的含义是

  

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

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

如果通过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'];
}

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