具有多个值的数组中的PHP组键
我有一个这样的数组:具有多个值的数组中的PHP组键,php,arrays,multidimensional-array,associative-array,Php,Arrays,Multidimensional Array,Associative Array,我有一个这样的数组: $sendemail= array( 'apple@yahoo.com' => '123456781234567', 'apple@yahoo.com' => '013881002296968', 'cherry@yahoo.com' => '3553220865206561', 'orange@yahoo.com' => '358805051217453', 'apple@yahoo.com' => '3579980542
$sendemail= array(
'apple@yahoo.com' => '123456781234567',
'apple@yahoo.com' => '013881002296968',
'cherry@yahoo.com' => '3553220865206561',
'orange@yahoo.com' => '358805051217453',
'apple@yahoo.com' => '357998054217777',
'cherry@yahoo.com' => '013881002296968',
);
'apple@yahoo.com' => 123456781234567, 013881002296968, 357998054217777
'cherry@yahoo.com' => 3553220865206561, 013881002296968
'orange@yahoo.com' => 358805051217453
我希望有这样的输出:
$sendemail= array(
'apple@yahoo.com' => '123456781234567',
'apple@yahoo.com' => '013881002296968',
'cherry@yahoo.com' => '3553220865206561',
'orange@yahoo.com' => '358805051217453',
'apple@yahoo.com' => '357998054217777',
'cherry@yahoo.com' => '013881002296968',
);
'apple@yahoo.com' => 123456781234567, 013881002296968, 357998054217777
'cherry@yahoo.com' => 3553220865206561, 013881002296968
'orange@yahoo.com' => 358805051217453
能够将密钥用作电子邮件地址,将值用作我的电子邮件好友
$email= 'apple@yahoo.com';
$body= '123456781234567, 013881002296968, 357998054217777';
mail($email, 'Your codes', $body);
其他电子邮件地址也一样
请注意,两个键可能具有相同的值,这很好,例如。apple@yahoo.com和cherry@yahoo.com具有相同的价值观;该值将同时发送给他们两人
我用了这个“for循环”,但不起作用。首先,我不能根据电子邮件地址对它们进行分组,其次,相同的值不会分配给其他电子邮件地址;如“0138810029296968”,应与共享apple@yahoo.com和cherry@yahoo.com
$sendmail= array(
'123456781234567' => 'apple@yahoo.com',
'013881002296968' => 'apple@yahoo.com',
'3553220865206561' => 'cherry@yahoo.com',
'358805051217453' => 'orange@yahoo.com',
'357998054217777' => 'apple@yahoo.com',
'013881002296968' => 'cherry@yahoo.com',
);
$out = array();
foreach($sendmail as $key=>$value)
if(array_key_exists($value, $out)) {
$out[$value][] = $key;
}
else {
$out[$value] = array($key);
}
输出
array (
'apple@yahoo.com' =>
array (
0 => 123456781234567,
1 => 013881002296968,
2 => 357998054217777,
),
'cherry@yahoo.com' =>
array (
0 => 3553220865206561,
),
'orange@yahoo.com' =>
array (
0 => 358805051217453,
),
)
在结果数组的元素上使用内爆
这里有一种替代Kris方法的方法,该方法迭代次数较少,但条件较多: 输入:
$sendmail= array(
'123456781234567' => 'apple@yahoo.com',
'013881002296968' => 'apple@yahoo.com',
'3553220865206561' => 'cherry@yahoo.com',
'358805051217453' => 'orange@yahoo.com',
'357998054217777' => 'apple@yahoo.com',
'013881002296968' => 'cherry@yahoo.com',
);
方法:
foreach($sendmail as $k=>$v){
if(!isset($out[$v])){$out[$v]='';} // initialize new element with empty string
$out[$v].=($out[$v]?',':'').$k; // concat the values with conditional comma
}
var_export($out);
输出:
array (
'apple@yahoo.com' => '123456781234567,357998054217777',
'cherry@yahoo.com' => '013881002296968,3553220865206561',
'orange@yahoo.com' => '358805051217453',
)
在一个数组中不能有多个相同的键,同样在$sendemail中也是如此。是的,它必须是0=>'apple@yahoo.com'然后是1=>'apple@yahoo.com“去工作。你能帮我们把print\r$sendemail的内容贴出来吗?这将有助于揭示我打印了一封$sendmail,这就是我得到的:数组[apple@yahoo.com] => 357998054217777 [cherry@yahoo.com] => 013881002296968 [orange@yahoo.com]=>35880551217453请重组您的输入数组编辑您的问题,以便我们可以帮助您@你打算更新你的问题/输入数组吗?在当前状态下,它无法正确解决,可能会关闭。是的,正如您所看到的,'013881002926968'应该处于apple@yahoo.com“好吧,但它不是。”波斯安罗哦,我现在明白了。您的输入数组中有一个错误。不能复制关键点并保留所有值。数组不是这样工作的。请提供一个有效/有效的输入数组结构供我们使用。@PersianHero除非您更新您的问题,否则您的问题可能会永久无法解决。如果你更新它,请ping我,这样我就可以回来,并提供一个工作的答案。因此,所有的问题都应该得到某种解决,让我们努力解决这个问题。