Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/228.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

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_Multidimensional Array_Associative Array - Fatal编程技术网

具有多个值的数组中的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我,这样我就可以回来,并提供一个工作的答案。因此,所有的问题都应该得到某种解决,让我们努力解决这个问题。