[英]PHP: Set the values of one array to another array
我想创建一个新数组,并将其键设置为等于另一个数组的值。
开始:
$names = array("don","james","jennifer","paul");
$ages = array("don" => 25, "paul" => 32);
完:
$name_age_map = array(
"don" => 25,
"james" => null,
"jennifer" => null,
"paul" => 32,
);
应该如何在PHP中完成? 这是我到目前为止所取得的最好成绩:
$name_age_map = array();
foreach ($names as $name) {
$name_age_map[$name] = $name_map[$name];
}
理想情况下,我什至不创建新的数组,我只是给$ names中的元素指定年龄。
只是为了好玩,您可以这样做:
$names = array("don","james","jennifer","paul");
$ages = array("don" => 25, "paul" => 32);
$names = array_merge(array_fill_keys($names, null), $ages);
var_dump($names);
产量:
array(4) {
["don"]=>
int(25)
["james"]=>
NULL
["jennifer"]=>
NULL
["paul"]=>
int(32)
}
$name_map = array();
foreach ($names as $name) {
$name_map[$name] = isset($ages[$name])?$ages[$name]:null;
}
问题在于$names
中的值就是-值。 为了使它们“相等”一个年龄,您需要将它们作为关键。 因为PHP不支持通过引用传递键,所以这意味着创建一个新数组:
$name_age_map = array();
foreach($names as $name) {
if(isset($ages[$name])) {
$name_age_map[$name] = $ages[$name];
}
else {
$name_age_map[] = $name;
}
}
或者,如果您始终希望名称成为键(可能更有意义):
$name_age_map = array();
foreach($names as $name) {
$name_age_map[$name] =
isset($ages[$name]) ? $ages[$name] : null;
}
$name_age_map = array();
foreach ($names as $name){
// this can also be replaced with
// if (array_key_exists($name, $ages)){
if (in_array($name, array_keys($ages))){
$name_age_map[$name] = $ages[$name];
}
else {
$name_age_map[$name] = null;
}
}
要操作原始数组,您需要将其翻转,然后添加关联的年龄。
尝试这个:
$names = array_flip($names);
foreach($names as $key => $value)
{
$names[$key] = (array_key_exists($key,$ages)) ? $ages[$key] : null;
}
比较两个数组中的键时, array_key_exists()
可以帮助您。 应用循环并在找到匹配项的地方分配值,否则返回null。 这应该为您解决。
$names = array("don","james","jennifer","paul");
$ages = array("don" => 25, "paul" => 32);
$merged = array();
foreach($names as $n) {
if(array_key_exists($n, $ages)) {
$merged[$n] = $ages[$n];
} else {
$merged[$n] = null;
}
}
var_dump($merged);
//Produces
array(4) {
["don"]=>
int(25)
["james"]=>
NULL
["jennifer"]=>
NULL
["paul"]=>
int(32)
}
array_merge(
array_combine(
$names,
array_fill(0,count($names),NULL)
),
$ages);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.