Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否有用于将关联数组元素传输到另一个关联数组的标准PHP函数_Php_Arrays_Function_Indexing_Associative Array - Fatal编程技术网

是否有用于将关联数组元素传输到另一个关联数组的标准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

是否有一个标准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 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-保留您的右键顺序。你可以加上这个答案,我来核对一下。有更好的解决办法。有更好的解决办法。