我有下一个数组
[
['id' => 30, 'count' => 3],
['id' => 45, 'count' => 7]
]
我需要它
[
30 => ['count' => 3],
45 => ['count' => 7]
]
我做了什么
$formatted = [];
foreach ($services as $service) {
$formatted[$service['id']] = [
'count' => $service['count']
];
}
我想要的是没有临时$格式变量的更优雅的解决方案。谢谢!
更新即可。非常感谢@rtrigoso! 使用laravel集合,我的代码看起来是
$services->reduce(function ($carry, $item) {
$carry[$item['id']] = ['count' => $item['count']];
return $carry;
});
答案 0 :(得分:5)
您可以使用array_column
:
$array = array_column($array, null, 'id');
您想要的输出之间的一个区别是,它仍然包含数组第二级中的id
键,如下所示:
[
30 => ['id' => 30, 'count' => 3],
45 => ['id' => 45, 'count' => 7],
]
但希望不会引起任何问题。如果您执行需要删除它,您可以使用以下内容执行此操作:
$array = array_map(function ($e) {
unset($e['id']);
return $e;
}, $array);
这种方法可能是最好的,如果您的行将来可能会有更多的密钥,即列出删除的密钥而不是要保留的密钥的速度更快。如果没有,并且你只有一个计数,那么说实话,你原来的例子可能是你得到的最好的。
答案 1 :(得分:2)
您可以使用array_reduce
<p>Name:*</p>
<input type="text" name="Name" class="formElem" required>
<p>Company Name: </p>
<input type="text" class="formElem" name="Company_Name">
<p>Email: *</p>
<input type="email" class="formElem" id="email" size="30" name="Email" required>
<p>Phone:*</p>
<input type="text" class="formElem" name="Phone" required>
<div class="checkbox">
<input id="ckbox" type="checkbox" name="checkbox_name[]" onchange="check()">
<p>I'm Going</p>
<input type="checkbox" name="checkbox_name[]">
<p>thanks, but I can't go</p>
<input type="checkbox" name="checkbox_name[]" required>
<p>I have read the above information</p>
<script>
function check() {
var temp = document.getElementsByClassName("formElem");
if (document.getElementById("ckbox").checked) {
for (var e = 0; e < temp.length; e++) { // For each element
var elt = temp[e];
elt.required = true;
}
} else {
for (var e = 0; e < temp.length; e++) { // For each element
var elt = temp[e];
elt.required = false;
}
}
}
</script>
它会给你你想要的结果:
$x_arr = array(
array('id' => 30, 'count' => 3),
array('id' => 45, 'count' => 7),
);
$y_arr = array_reduce($x_arr, function ($result, $item) {
$result[$item['id']] = array('count' => $item['count']);
return $result;
}, array());
print_r($y_arr);