34

您好想问是否有一种方法可以在没有 foreach 的情况下执行此操作($array as $k=>$v)。我知道它会起作用,但如果你知道的话,我正在寻找一种更优雅的方式。所以我的数组就像:

1 = 231
2 = 432
3 = 324

我翻转它,它变成了:231 => 1, 432 =>2, 324 => 3。现在我需要做的是将所有值设置为'1'

4

8 回答 8

64

您可以使用array_fill_keys

$array = array(
    1 => 231,
    2 => 432,
    3 => 324
);

$array = array_flip($array);

$array = array_fill_keys(array_keys($array), 1);
于 2012-06-22T14:53:29.737 回答
19

array_fill_keys()应该是你需要的:

$keys = array_keys($yourArray);
$filled = array_fill_keys($keys, 1);
于 2012-06-22T14:53:11.287 回答
11

对于PHP >5.3,您可以使用匿名函数。

array_walk($array,function(&$value){$value=1;});

注意:值是通过引用传递的。

于 2015-02-13T06:57:28.520 回答
5

我相信你正在寻找这个函数:array_fill()

从上面的链接:

“用 value 参数的值的 num 个条目填充数组,键从 start_index 参数开始。”

尽管如果您的索引不是数字和/或不可枚举的(例如,从 231 到 324 包括在内),那么正如 Rocket 所说,使用 array_fill_keys()或您的常规 foreach可能会更好。

于 2012-06-22T14:52:38.840 回答
3

我在这个帖子上遇到了同样的问题,但我最终得到了另一种方法。

为什么使用 array_flip + array_keys 而不是简单地使用 array_values?

$array = array(
    1 => 231,
    2 => 432,
    3 => 324
);

$array = array_fill_keys(array_values($array), 1);
于 2014-01-09T10:58:42.360 回答
2

您调用的任何方法,例如 array_map 或 fill_keys 仍将使用循环来遍历数组。似乎您需要诸如 array_map 之类的东西,可以在此处找到

如果您认为这更优雅,对每个人来说都是:)

于 2012-06-22T14:54:59.380 回答
2
array_replace(array_flip($columns), array_fill_keys($columns, 0));
于 2017-07-22T09:55:39.767 回答
0

如果您需要翻转键/值并将所有值重置为同一事物 (1),您可以通过一个简单的操作来完成:

$array = array_fill_keys($array, 1);

你的阵列

$array = [
    1 => 231
    2 => 432
    3 => 324
];

变成

$array = [
    231 => 1
    432 => 1
    324 => 1
];
于 2021-02-17T22:28:58.373 回答