2017-05-13 1 views
0

Ich habe ein Array wie folgt bekommen:PHP Gruppenschlüssel in Array mit mehreren Werten

$sendemail= array(
    '[email protected]' => '123456781234567', 
    '[email protected]' => '013881002296968', 
    '[email protected]' => '3553220865206561', 
    '[email protected]' => '358805051217453', 
    '[email protected]' => '357998054217777', 
    '[email protected]' => '013881002296968', 
); 

Ich möchte eine Ausgabe wie diese haben:

'[email protected]' => 123456781234567, 013881002296968, 357998054217777 
'[email protected]' => 3553220865206561, 013881002296968 
'[email protected]' => 358805051217453 

der Lage sein, das zu verwenden, Schlüssel als E-Mail-Adresse und die Werte als meine E-Mail-Kumpel

$email= '[email protected]'; 
$body= '123456781234567, 013881002296968, 357998054217777'; 
mail($email, 'Your codes', $body); 

und das gleiche gilt für die anderen E-Mail-Adressen.

Bitte beachten Sie, dass 2-Tasten können die gleichen Werte haben, die in Ordnung ist (zB [email protected] und [email protected] die gleichen Werte haben, der Wert wird an beide gesendet)

I nutzte diese 'for-Schleife', aber hat nicht funktioniert. Erstens kann ich sie nicht anhand von E-Mail-Adressen gruppieren, zweitens werden die gleichen Werte nicht den anderen E-Mail-Adressen zugewiesen; wie '013881002296968', die mit [email protected] und [email protected]

$sendmail= array(
    '123456781234567' => '[email protected]', 
    '013881002296968' => '[email protected]', 
    '3553220865206561' => '[email protected]', 
    '358805051217453' => '[email protected]', 
    '357998054217777' => '[email protected]', 
    '013881002296968' => '[email protected]', 
); 
$out = array(); 
foreach($sendmail as $key=>$value) 
    if(array_key_exists($value, $out)) { 
     $out[$value][] = $key; 
    } 
    else { 
     $out[$value] = array($key); 
    } 

Ausgabe

array (
    '[email protected]' => 
    array (
    0 => 123456781234567, 
    1 => 013881002296968, 
    2 => 357998054217777, 
), 
    '[email protected]' => 
    array (
    0 => 3553220865206561, 
), 
    '[email protected]' => 
    array (
    0 => 358805051217453, 
), 
) 
+4

Sie können nicht mehrere gleiche Schlüssel in einem Array haben, Sie haben auch in $ Sendemail. –

+0

Ja, es müsste 0 => '[email protected]' und dann 1 => '[email protected]' funktionieren. Kannst du bitte den Inhalt von 'print_r ($ sendemail)' für uns posten? Es wird helfen zu enthüllen, was wirklich los ist – jaggedsoft

+0

Ich habe eine 'print_r ($ sendemail)' und das ist, was ich habe: '' 'Array ( [[email protected]] => 357998054217777 [[email protected] ] => 013881002296968 [[email protected]] => 358805051217453 ) '' ' – jaggedsoft

Antwort

0

Verwendung implodieren auf das Element Ihrer Ergebnisarray geteilt werden sollte. live demo

foreach($sendmail as $key=>$value) { 
    $out[$value][] = $key; 
} 
$out = array_map(function($v){return implode(',', $v);}, $out); 
1

Hier ist eine Alternative zu Kris' Methode, die weniger Iterationen, aber mehr conditionals:

Input:

$sendmail= array(
    '123456781234567' => '[email protected]', 
    '013881002296968' => '[email protected]', 
    '3553220865206561' => '[email protected]', 
    '358805051217453' => '[email protected]', 
    '357998054217777' => '[email protected]', 
    '013881002296968' => '[email protected]', 
); 

Methode:

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); 

Output:

array (
    '[email protected]' => '123456781234567,357998054217777', 
    '[email protected]' => '013881002296968,3553220865206561', 
    '[email protected]' => '358805051217453', 
) 
+0

Ja, wie Sie sehen können, sollte '013881002296968' auch in [email protected] sein, aber es ist nicht. – PersianHero

+0

@PersianHero Oh, das sehe ich jetzt. Sie haben einen Fehler in Ihrem Eingabe-Array. Sie können Schlüssel nicht duplizieren und alle Werte beibehalten. So funktionieren Arrays nicht. Bitte stellen Sie uns eine gültige/funktionierende Eingangsmatrix zur Verfügung, mit der Sie spielen können. – mickmackusa

+0

@PersianHero Ihre Frage kann abgebrochen werden (permanent ungelöst), es sei denn, Sie aktualisieren Ihre Frage. Wenn Sie es aktualisieren, bitte ping mich, damit ich zurückkomme und eine funktionierende Antwort liefern kann. Alle Fragen zu SO sollten gelöst werden, lasst uns an der Lösung dieser Frage arbeiten. – mickmackusa

Verwandte Themen