我有两组数组,其中填充了值。一个是另一个的两倍大。我需要使用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
我该怎么做?
您可以尝试使用此
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]);
}
}
您可以这样做:
$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.
$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);
您可以简单地使用array_chunk
和array_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);
$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]);
}
如果结果需要是一个多维数组,那么只需组合用户和分块值:
$result = array_combine($user, array_chunk($value, 2));
如果它需要是一个逗号分隔的列表,那么除了将implode()
映射到每个内部数组之外,执行相同的操作:
$result = array_combine($user,
array_map(function($v) { return implode(',', $v); },
array_chunk($value, 2)));
你可以试试这个-
$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_chunk($value, 2)
替换array_map
函数。
Fiddle