<?php
$a = array("1");
var_dump(array_fill_keys($a, "test"));
?>
array(1) {
[1]=>
string(4) "test"
}
现在字符串键 "1" 变成了整数值 1,小心。
(PHP 5 >= 5.2.0, PHP 7, PHP 8)
array_fill_keys — 使用指定键填充数组
返回填充后的数组
示例 #1 array_fill_keys() 示例
<?php
$keys = array('foo', 5, 10, 'bar');
$a = array_fill_keys($keys, 'banana');
print_r($a);
?>
上面的示例将输出
Array ( [foo] => banana [5] => banana [10] => banana [bar] => banana )
<?php
$a = array("1");
var_dump(array_fill_keys($a, "test"));
?>
array(1) {
[1]=>
string(4) "test"
}
现在字符串键 "1" 变成了整数值 1,小心。
获取用于计算字母频率的零关联数组
<?php
$ltrs = array_fill_keys( range('a', 'z'), 0 );
如果将关联数组用作 array_fill_keys 的第二个参数,则关联数组将被追加到第一个数组的所有值中。
例如
<?php
$array1 = array(
"a" => "first",
"b" => "second",
"c" => "something",
"red"
);
$array2 = array(
"a" => "first",
"b" => "something",
"letsc"
);
print_r(array_fill_keys($array1, $array2));
?>
输出将是
Array(
[first] => Array(
[a] => first,
[b] => something,
[0] => letsc
),
[second] => Array(
[a] => first,
[b] => something,
[0] => letsc
),
[something] => Array(
[a] => first,
[b] => something,
[0] => letsc
),
[red] => Array(
[a] => first,
[b] => something,
[0] => letsc
)
)
RE: bananasims at hotmail dot com
我还需要一个解决方法,因为没有新版本的 PHP,而且我想要自己的键。bananasims 的代码不喜欢使用数组作为第二个参数...
这是一个略微修改后的版本,可以处理 2 个数组作为输入
//我们希望这些值成为键
$arr1 = (0 => "abc", 1 => "def");
/我们希望这些值成为值
$arr2 = (0 => 452, 1 => 128);
function array_fill_keys($keyArray, $valueArray) {
if(is_array($keyArray)) {
foreach($keyArray as $key => $value) {
$filledArray[$value] = $valueArray[$key];
}
}
return $filledArray;
}
array_fill_keys($arr1, $arr2);
返回
abc => 452, def =>128
有些版本没有这个函数。
我试着自己写。
你可以参考下面的脚本
function array_fill_keys($array, $values) {
if(is_array($array)) {
foreach($array as $key => $value) {
$arraydisplay[$array[$key]] = $values;
}
}
return $arraydisplay;
}
此函数与以下代码作用相同
<?php
$array = array_combine($keys,array_fill(0,count($keys),$value));
?>
Scratchy 的版本仍然无法像定义中描述的那样工作。这里有一个版本可以将混合变量作为第二个参数,如果未指定则默认为空字符串。不知道这是否与以后版本的函数完全相同,但至少要接近得多。
function array_fill_keys($target, $value = '') {
if(is_array($target)) {
foreach($target as $key => $val) {
$filledArray[$val] = is_array($value) ? $value[$key] : $value;
}
}
return $filledArray;
}
这适用于字符串或数字,因此如果我们有
$arr1 = array(0 => 'abc', 1 => 'def');
$arr2 = array(0 => 452, 1 => 128);
$arr3 = array(0 => 'foo', 1 => 'bar');
那么
array_fill_keys($arr1,$arr2)
返回: [abc] => 452, [def] => 128
array_fill_keys($arr1,0)
返回: [abc] => 0, [def] => 0
array_fill_keys($arr2,$arr3)
返回: [452] => foo, [128] => bar
array_fill_keys($arr3,'BLAH')
返回: [foo] => BLAH, [bar] => BLAH
以及 array_fill_keys($arr1)
返回: [abc] =>, [def] =>
从关联数组中删除任意键
<?php
function nuke_keys($keys, $array) {
return array_diff_key($array, array_fill_keys($keys, 0));
}
$array = array('blue' => 1, 'red' => 2, 'green' => 3, 'purple' => 4);
$keys = array('red', 'purple');
print_r(nuke_keys($keys, $array));
?>
上面的代码片段将返回
数组
(
[blue] => 1
[green] => 3
)
请参阅 array_fill_keys 用于从预先存在的数组中创建一个新数组,其形式为预先存在的数组的值将成为新数组的键。而它们的值将与我们在第二个参数中给出的值相同。以下示例---->>>
<?php
// 预先存在的数组
$a = array("a","b","c","d","e");
// 新数组,包含单个相同的值
$newArray = array_fill_keys($a, "Testing");
// 打印数组
echo "<pre>";
print_r($newArray);
echo "</pre>";
?>
输出
数组
(
[a] => Testing
[b] => Testing
[c] => Testing
[d] => Testing
[e] => Testing
)
$keys = array(1, 2, 3);
// 用值填充它。
$keys = array_fill_keys($keys, 'banana');
print_r($keys);
// 用不同的值填充它。
$apples = array_fill_keys(array_keys($keys), 'apple');
print_r($apples);
// 输出
数组 (
[1] => banana
[2] => banana
[3] => banana
)
数组 (
[1] => apple
[2] => apple
[3] => apple
)