是否有用于将关联数组元素传输到另一个关联数组的标准PHP函数
是否有一个标准PHP函数可以更改关联数组的索引名是否有用于将关联数组元素传输到另一个关联数组的标准PHP函数,php,arrays,function,indexing,associative-array,Php,Arrays,Function,Indexing,Associative Array,是否有一个标准PHP函数可以更改关联数组的索引名 $a1 = array('one'=>1,'two'=>2,'three'=>3); $new_index_names = array('one'=>'ono','two'=>'dos','three'=>'tres'); $a2 = change_index_names($a1,$new_index_names); print_r($a2); // $a2 should have the index n
$a1 = array('one'=>1,'two'=>2,'three'=>3);
$new_index_names = array('one'=>'ono','two'=>'dos','three'=>'tres');
$a2 = change_index_names($a1,$new_index_names);
print_r($a2);
// $a2 should have the index names changed accordingly and look like this:
// array('ono'=>1,'dos'=>2,'tres'=>3)
编辑
请注意,函数需要知道到新索引名的映射。也就是说,在$new_index_names数组中提供了映射。因此,它需要再次知道“ono”是“one”的新索引名
编辑
我知道你们可以想出自己的解决方案,我想知道是否有一个标准的PHP函数已经做到了这一点
编辑
有几种情况下,更改索引名会有所帮助:
1) 将post值名称分隔为通用/内部名称,以便可以分隔您的后端代码来自前端代码。
2) 例如,假设您有两个来自post的数组,需要通过 相同的精确过程,两个数组除外,尽管它们的平均值/包含相同的精确类型 对于值/顺序/结构,它们的索引名是不同的。那么什么时候 传递给只使用一组索引名的函数/方法,您将
在将索引名传递给该函数/方法之前,需要对其进行转换。不仅仅在一个函数中,但您可以使用
数组\u值
获取第一个数组的值,并且数组\u组合
设置新键不仅仅在一个函数中,但是您可以使用array\u values
获取第一个数组的值,并使用array\u combine
设置新键假设两个数组的计数相等,一种方法是使用and
假设两个数组的计数相等,一种方法是使用and
您不需要
array\u值
即可获得所需的输出
array\u combine($new\u index\u names,$a1)
您不需要数组\u值
即可获得所需的输出
array\u combine($new\u index\u names,$a1)代码> < P>以前的答案不考虑<代码> $A1和<代码> $NeXixIdxIxNox< /Cord>,所以我把我的解决方案放在下面:
$a1 = array('one' => 1, 'two' => 2, 'three' => 3, 'zero' => 0);
$new_index_names = array('zero' => 'zero', 'one' => 'ono', 'two' => 'dos', 'three' => 'tres');
array_combine(
$new_index_names,
str_replace(array_keys($a1), array_values($a1), array_keys($new_index_names))
);
Array
(
[zero] => 0
[ono] => 1
[dos] => 2
[tres] => 3
)
以前的答案不考虑<代码> $A1和<代码> $NeXixIdxIxNox< /Cord>,所以我把我的解决方案放在下面:
$a1 = array('one' => 1, 'two' => 2, 'three' => 3, 'zero' => 0);
$new_index_names = array('zero' => 'zero', 'one' => 'ono', 'two' => 'dos', 'three' => 'tres');
array_combine(
$new_index_names,
str_replace(array_keys($a1), array_values($a1), array_keys($new_index_names))
);
Array
(
[zero] => 0
[ono] => 1
[dos] => 2
[tres] => 3
)
到目前为止,我看到的最好答案是:
foreach ($a1 as $k => $v) $a2[$new_index_names[$k]] = $v;
学分归jh1711,这是我迄今为止看到的最好答案:
foreach ($a1 as $k => $v) $a2[$new_index_names[$k]] = $v;
学分归jh1711遗漏了该部分+1在极少数情况下,其中一个数组未按其索引排序,这可能会产生。否则+1.0很好。但唯一的问题是$new_index_names数组必须按正确的顺序包含元素。我还想保留$new\u index\u名称中保留的映射,以便它知道从$a1中的哪个索引获取值。如果排序顺序有问题,但两个数组都有相同的键,那么您可以array\u merge($a1,$new\u index\u名称)
忽略该部分+1在极少数情况下,其中一个数组未按其索引排序,这可能会产生。否则+1.0很好。但唯一的问题是$new_index_names数组必须按正确的顺序包含元素。我还想保留$new\u index\u名称中保留的映射,以便它知道从$a1中的哪个索引获取值。如果排序顺序是一个问题,但两个数组都有相同的键,那么您可以array\u merge($a1,$new\u index\u name)
查找内部函数的任何原因<代码>foreach($a1为$k=>$v)$a2[$new_index_name[$k]]]=$v
没有那么多代码要写。只是想知道是否有一个标准的php函数来代替重写code.jh1711-实际上,您的函数没有保留$new_index_name中提供的顺序或映射。应该保持从$a1开始的顺序。$new_index_name提供的映射应该保留。对于$a1中存在的键没有处理方法,但是$new_index_名称中没有,这是我在任何“真正的代码”中都会添加的东西。如果您喜欢$new_index_键的顺序,您可以直接在其上循环,而不是$a1.jh1711-保留您的右键顺序。你可以加上这个答案,我来核对一下。你为什么要找一个内部函数<代码>foreach($a1为$k=>$v)$a2[$new_index_name[$k]]]=$v没有那么多代码要写。只是想知道是否有一个标准的php函数来代替重写code.jh1711-实际上,您的函数没有保留$new_index_name中提供的顺序或映射。应该保持从$a1开始的顺序。$new_index_name提供的映射应该保留。对于$a1中存在的键没有处理方法,但是$new_index_名称中没有,这是我在任何“真正的代码”中都会添加的东西。如果您喜欢$new_index_键的顺序,您可以直接在其上循环,而不是$a1.jh1711-保留您的右键顺序。你可以加上这个答案,我来核对一下。有更好的解决办法。有更好的解决办法。