所以,拥有如下数组:
$input = [
'first_name' => 'Alex',
'last_name' => 'UFO',
'email' => 'test@test.com',
'phone_number' => '124124',
// .....
'referral_first_name' => 'Jason',
'referral_last_name' => 'McNugget',
'referral_email' => 'jingleball@nuggets.com',
'referral_phone_number' => '1212415',
];
在处理完第一部分之后,在referral...
之前,您是否考虑过使用referral_first_name
等替换first_name
的更好方法,然后进行以下操作?也许是一种更加动态和自动的方式。
$input['first_name'] = $input['referral_first_name'];
unset($input['referral_first_name']);
$input['last_name'] = $input['referral_last_name'];
unset($input['referral_last_name']);
$input['email'] = $input['referral_email'];
unset($input['referral_email']);
$input['phone_number'] = $input['referral_phone_number'];
unset($input['referral_phone_number']);
伙计们,我忘了提及,但我已经用foreach
做了,但问题是当数组变得非常大时(通常是这样,而不是一个人使用该函数,但是许多),这意味着额外的不必要的处理时间,因为它必须在到达referral_..
部分之前迭代整个数组。
答案 0 :(得分:2)
你必须创建另一个数组,这段代码应该动态地执行:
$newInput = array();
foreach($input as $key => $element){
$newKey = explode("_", $key, 2);
$newInput[$newKey[1]] = $element;
}
<强>输出强>
希望这会有所帮助: - )
答案 1 :(得分:1)
array_walk
修改该临时数组以向其添加referral
字array_combine
。<?php
$input = [
'first_name' => 'Alex',
'last_name' => 'UFO',
'email' => 'test@test.com',
'phone_number' => '124124'];
$ak = array_keys($input);
array_walk($ak,function (&$v){ $v = 'referral_'.$v;});
$input=array_combine($ak,array_values($input));
print_r($input);
<强> OUTPUT:
强>
Array
(
[referral_first_name] => Alex
[referral_last_name] => UFO
[referral_email] => test@test.com
[referral_phone_number] => 124124
)
foreach
$newarr = array();
foreach($input as $k=>$v ) {
$newarr["referral_".$k]=$v;
}
答案 2 :(得分:0)
这样的事情怎么样:
$replace = array('first_name', 'last_name', 'email');
foreach($replace AS $key) {
$input[$key] = $input['referral_' . $key];
unset($input[$input['referral_' .$key]]);
}
答案 3 :(得分:0)
尝试下面的一个......
$input = [
//'first_name' => 'Alex',
// 'last_name' => 'UFO',
// 'email' => 'test@test.com',
//'phone_number' => '124124',
// .....
'referral_first_name' => 'Jason',
'referral_last_name' => 'McNugget',
'referral_email' => 'jingleball@nuggets.com',
'referral_phone_number' => '1212415',
];
foreach ($input as $key=>$value){
$refereal_pos = strpos($key, 'referral_');
if($refereal_pos !== FALSE && $refereal_pos == 0){
$input[str_replace('referral_', '', $key)] = $value;
unset($input[$key]);
}
}
print_r($input);
答案 4 :(得分:0)
您可以使用以下内容;
function changeKeys($input) {
$keys = array_keys($input);
foreach($keys as $key) {
if (strpos($key, "referral_") !== false) {
$tempKey = explode("referral_", $key);
$input[$tempKey[1]] = $input[$key];
unset($input[$key]);
}
}
return $input;
}
changeKeys($input);
以下是一个有效的演示: codepad
注意:请确保您的密钥在“referral_”删除后由于重复密钥而被覆盖