php - 如何在php中将具有并行属性的数组列表转换为类似对象的数组列表
问题描述
这个问题很难描述。
我需要转换这个数组:
$points = [
'x' => [1, 3, 5],
'y' => [2, 4, 6],
];
到这个数组:
$points = [
['x' => 1, 'y' => 2],
['x' => 3, 'y' => 4],
['x' => 5, 'y' => 6],
];
尽可能短的方式。
由于 http 请求格式,我需要此解决方案:
http://points-server/?x[]=1&x[]=3&x[]=5
如果有人知道这种转换的名称,那就太好了。
我正在使用Yii2框架,但找不到使用 ArrayHelper 的快速解决方案。
解决方案
以下逻辑可能会对您有所帮助。
基本上有两种方法可以达到预期的结果。第一个假设标签“x”和“y”可以被硬编码,并用于引用源数组中的不同“点” $points
。结果:array $newPoints0
。
或者,您可以在源数组中更改这些“标签”。为此,我们首先获取键,并以几乎相同的方式重新排列您的源数组。结果:array $newPoints1
<?php
$points = [
'x' => [1, 3, 5],
'y' => [2, 4, 6],
];
// use labels 'x' and 'y' (hard coded)
$size = count($points['x']);
for($i=0; $i < $size; $i++) {
$newPoints0[$i] = ['x' => $points['x'][$i], 'y' => $points['y'][$i]];
}
echo '<pre>';
print_r($newPoints0);
echo '</pre>';
// labels 'x' and 'y' could change (dynamic)
$keys = array_keys($points);
$x = $points[$keys[0]]; // fetch label
$y = $points[$keys[1]]; // fetch label
$size = count($x);
for($i=0; $i < $size; $i++) {
$newPoints1[$i] = [$keys[0] => $x[$i], $keys[1] => $y[$i]];
}
echo '<pre>';
print_r($newPoints1);
echo '</pre>';
工作演示
输出:
Array
(
[0] => Array
(
[x] => 1
[y] => 2
)
[1] => Array
(
[x] => 3
[y] => 4
)
[2] => Array
(
[x] => 5
[y] => 6
)
)
Array
(
[0] => Array
(
[x] => 1
[y] => 2
)
[1] => Array
(
[x] => 3
[y] => 4
)
[2] => Array
(
[x] => 5
[y] => 6
)
)
推荐阅读
- listview - 在 Flutter 中构建动态列表最有效的方法是什么?
- java - 如何停止我的代码在方法内运行而不给出想要的返回
- python - 如何将拟合参数从一个 sklearn 管道步骤传递到另一个?
- c++ - 如何在 ImGui Columns 中右对齐文本?
- kubernetes - 更新元数据注释
- vps - VPS:控制 hotname 和 /etc/resolv.conf (debian 10)
- android - Android中的布局正方形方向是什么?
- java - Java-如何实现自定义映射(函数映射器),它可以在给定函数的情况下转换映射的值
- c++ - 为什么不输出名字和姓氏?
- swift - 让 containerView 上的按钮对不相关的 containerView 执行操作