PHP如何用另一个数组值替换一个关联数组键
我有两个数组,需要第一个数组中的值成为关联数组每行的键。我想我说得对。我有两个阵列:PHP如何用另一个数组值替换一个关联数组键,php,arrays,key,Php,Arrays,Key,我有两个数组,需要第一个数组中的值成为关联数组每行的键。我想我说得对。我有两个阵列: Array ( [field_name0] => first_name [field_name1] => mobile [field_name2] => email [field_name3] => last_name ) 及 我需要第一个数组中的值替换第二个数组中的值,如下所示: Array ( [1] => Array (
Array
(
[field_name0] => first_name
[field_name1] => mobile
[field_name2] => email
[field_name3] => last_name
)
及
我需要第一个数组中的值替换第二个数组中的值,如下所示:
Array
(
[1] => Array
(
[first_name] => Peter
[mobile] => 1234567890
[email] => email@email.com
[last_name] => Griffin
)
[2] => Array
(
[first_name] => Al
[mobile] => 9874561230
[email] => test@test.com
[last_name] => Bundy
)
)
为了实现这一点,我在一些foreach
循环中尝试了一些糟糕的尝试,但这对我来说有点棘手。请帮忙。我希望我忽略了一个简单的方法
我尝试的是:-
foreach( $field_map as $origKey => $value ){
foreach($csvdata as $csvrow){
foreach($csvrow as $cKey => $cValue){
$newKey = $value;
$newArray[$newKey] = $cValue;
}
}
}
此脚本:
$users = [
[
'First Name' => 'Peter',
'mobile' => 1234567890,
'email' => 'email@email.com',
'Last Name' => 'Griffin',
],
[
'First Name' => 'Al',
'mobile' => 9874561230,
'email' => 'test@test.com',
'Last Name' => 'Bundy',
],
];
$fields = [
'field_name0' => 'first_name',
'field_name1' => 'mobile',
'field_name2' => 'email',
'field_name3' => 'last_name',
];
$fieldNames = array_values($fields);
foreach ($users as &$user) {
$user = array_combine($fields, array_values($user));
}
print_r($users);
给你想要的
实际上,我们只是丢弃密钥并依赖于这些项的顺序。这里-没有foreach:)
就我所知,这是令人尴尬的:
foreach($origKey=>value的字段映射){foreach($csvdata作为$csvrow){foreach($csvrow作为$cKey=>$cValue){$newKey=$value;$newArray[$newKey]=$cValue;}}
$field\u map是第一个数组,$csvdata是第二个数组。请检查我的最新答案。删除我的答案,因为没有回应。是!就这样!正是我需要的。谢谢你,康斯坦丁!!如果你的条件符合你对我的要求,那也不行。哦?我将在我的代码中测试一些示例,看看它是否有效。@khtims75,如果您想在没有每个用户的完整值数组的情况下使用它,您可以使用sizeof()
来确定有多少实际字段,并为每个情况剪切$fields
数组。我没有这样做,因为每次都有完整的记录对我来说是有意义的,即使是空值。
$users = [
[
'First Name' => 'Peter',
'mobile' => 1234567890,
'email' => 'email@email.com',
'Last Name' => 'Griffin',
],
[
'First Name' => 'Al',
'mobile' => 9874561230,
'email' => 'test@test.com',
'Last Name' => 'Bundy',
],
];
$fields = [
'field_name0' => 'first_name',
'field_name1' => 'mobile',
'field_name2' => 'email',
'field_name3' => 'last_name',
];
$fieldNames = array_values($fields);
foreach ($users as &$user) {
$user = array_combine($fields, array_values($user));
}
print_r($users);
$result = array_map(
function($person) use ($keys) {
return array_combine($keys, $person);
},
$source);