2016-04-05 11 views
0

Ich habe zwei Sätze von Array mit Werten gefüllt. Eins ist zweimal so groß wie das andere. Ich muss einem einzelnen Benutzer, der in einem anderen Array vorhanden ist, mit PHP mehrere Werte zuweisen.Wie weisen Sie einem einzelnen Benutzer in einem Array mehrere Werte zu?

Ich Erläuterung des Szenario unter:

$user=['Raj','Rahul','Scot','Virat']; 

$value=['1','2','3','4','5','6','7','8'] 

Hier muss ich in einer Schleife an jeden Benutzer 2-Werte von $value Array zuzuweisen. Die Ausgabe sollte wie folgt aussehen:

'Raj'->1,2 
'Rahul'->3,4 
'Scot'->5,6 
'Virat'->7,8 

Wie kann ich das tun?

Antwort

1

Sie können mit diesem versuchen

if (count($value) !== (2*count($user)) { 
    print 'incorrect size'; 
} 
else { 
    $result = array(), 
    for ($i=0, $j=0 ; $i<count($user) ; $i++, $j+=2) { 
     $result[$user[$i]] = sprintf('%s,%s', $value[$j], $value[$j+1]); 
    } 
} 
0

Sie können wie folgt tun:

$user=['Raj','Rahul','Scot','Virat']; 
$value=['1','2','3','4','5','6','7','8']; 

$output = []; 
foreach($user as $key => $name){ 
    $output[$name] = [$value[$key*2], $value[$key*2 + 1]]; 
} 
print_r($output); // <-- you will have here your array. 
+0

es wirft viele Syntaxfehler in jeder Zeile. Und auch nach der Benutzereingabe sollten die Werte dem Benutzer zuweisen. – subhra

+0

Welche Syntaxfehler? –

+0

Zuerst sollte es '$ user = array ('Raj', 'Rahul', 'Schot', 'Virat') sein;' und auch diese Zeile '$ output [$ name] = [$ value [$ key * 2] , $ value [$ key * 2 + 1]]; 'Wurffehler. – subhra

0

Sie können versuchen, diese -

$user=['Raj','Rahul','Scot','Virat']; 

$value=['1','2','3','4','5','6','7','8']; 

## generate , separated values from every 2 elements in $value array 
$temp = array_chunk($value, 2); // Generate array chunks with 2 elements in the same order 
$temp = array_map(function($v) { 
    return implode(',', $v); // implode them with comma 
}, $temp); 

## Combine the user array (as key) && generated $temp array (as values) 
$new = array_combine($user, $temp); 

var_dump($new); 

Ausgabe

array(4) { 
    ["Raj"]=> 
    string(3) "1,2" 
    ["Rahul"]=> 
    string(3) "3,4" 
    ["Scot"]=> 
    string(3) "5,6" 
    ["Virat"]=> 
    string(3) "7,8" 
} 

Wenn Sie die , getrennte Werte nicht brauchen, Die array_map Funktion kann durch ersetzt werden array_chunk($value, 2).

Fiddle

1

Sie einfach array_chunk und array_walk wie können als

$result = []; 
$chunked_array = array_chunk($value, 2); 
array_walk($chunked_array,function($v,$k) use (&$result,$user) { 
    $result[$user[$k]] = implode(',',$v); 
}); 
print_r($result); 

folgt Oder Sie können einfach for Schleife wie als

verwenden
$result = []; 
$count = count($value); 
$j = 0; 
for($i = 0; $i < $count; $i += 2){ 
    if(isset($user[$j])) 
     $result[$user[$j++]] = $value[$i].",".$value[$i+1]; 
} 
print_r($result); 
0
$user=['Raj','Rahul','Scot','Virat']; 
$value=['1','2','3','4','5','6','7','8']; 

$output = []; 
foreach($user as $key => $name){ 
$output[$name] = $value[$key*2].",". $value[$key*2 + 1]; 
} 
echo "<pre>"; 
print_r($output); 
+1

Fügen Sie noch ein paar Zeilen hinzu, um über Ihren Ansatz zu sprechen und wie er für das OP nützlich ist. – Alessiox

0
$user = ['Raj','Rahul','Scot','Virat']; 
$values = ['1','2','3','4','5','6','7','8']; 
$final = array(); 
foreach($user as $key => $content){ 
    $final[$content] = array($values[$key*2],$values[($key*2)+1]); 
} 
+0

Willkommen bei Stack Overflow! Während dieser Code die Frage beantworten kann, verbessert ein zusätzlicher Kontext, warum und/oder wie dieser Code die Frage beantwortet, seinen langfristigen Wert. – ryanyuyu

0

Wenn das Ergebnis einfach ein mehrdimensionales Array sein muss dann die Benutzer kombinieren und chunked Werte:

$result = array_combine($user, array_chunk($value, 2)); 

Wenn es außer Karte dann das gleiche tun eine durch Kommata getrennte Liste sein muss implode() zu jedem inneren Array:

Verwandte Themen