2016-04-05 44 views
0

我有兩組數組填充值。一個是另一個的兩倍大小。我需要使用PHP將多組值分配給其他數組中存在的單個用戶。如何爲數組中的單個用戶分配多個值?

我解釋下面的情形:

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

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

在這裏,我需要分配$value陣列的2個值,以在一個循環中每個用戶。輸出應該是這樣的:

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

我該怎麼做?

回答

1

你可以用這個

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

你可以這樣做:

$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

其在每行中引發許多語法錯誤,並且還根據用戶輸入值將這些值分配給用戶。 – subhra

+0

什麼語法錯誤? –

+0

首先它應該是'$ user = array('Raj','Rahul','Scot','Virat');'還有這行'$ output [$ name] = [$ value [$ key * 2] ,$ value [$ key * 2 + 1]];'拋出錯誤。 – subhra

0

你可以試試這個 -

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

輸出

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

如果您不需要,分隔值,可以用array_map函數替換array_chunk($value, 2)

Fiddle

1

您可以簡單地使用array_chunkarray_walk嘗試像如下

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

或者你可以簡單地使用for循環等作爲

$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

再添加幾行,討論您的方法以及它對OP的用處。 – 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

歡迎來到Stack Overflow!雖然這段代碼可能會回答這個問題,但爲什麼和/或代碼如何回答這個問題提供了額外的背景,這提高了它的長期價值。 – ryanyuyu

0

如果結果必須是一個多維數組則簡單地將用戶和組塊的值:

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

如果它需要一個逗號分隔的列表,然後做同樣動作,除了地圖implode()到每個內部陣列:

$result = array_combine($user, 
         array_map(function($v) { return implode(',', $v); }, 
            array_chunk($value, 2))); 
相關問題