我有一个数组:
Array
(
[12] => USD
[13] => 10150.00
[14] => 9850.00
[15] => SGD
[16] => 8015.40
[17] => 7915.40
[18] => HKD
[19] => 1304.60
[20] => 1288.60
...
)
我想做的是安排它是这样的:
Array
(
[USD] => Array
(
[Buy] => 10150.00
[Sell] => 9850.00
)
[SGD] => Array
(
[Buy] => 8015.40
[Sell] => 7915.40
)
[HKD] => Array
(
[Buy] => 1304.60
[Sell] => 1288.60
)
...
)
我已经完成了很多数组函数,但仍然坚持这一点。
答案 0 :(得分:5)
如果字段组保持不变:
然后,你可以这样做:
$old_array = array('USD', 123.00, 432.34, 'SGD', 421.41, 111.11);
$new_array = array();
for ($i = 0; $i < count($old_array); $i = $i + 3) {
$new_array[$old_array[$i]] = array
(
'Buy' => $old_array[$i + 1],
'Sell' => $old_array[$i + 2]
);
}
答案 1 :(得分:2)
$data = array
(
'USD',
'10150.00',
'9850.00',
'SGD',
'8015.40',
'7915.40',
'HKD',
'1304.60',
'1288.60',
);
$result = array();
while (is_null($value = array_shift($data)) !== true)
{
if (preg_match('~^[A-Z]{3}$~', $value) > 0)
{
$result[$value] = array
(
'Buy' => array_shift($data),
'Sell' => array_shift($data),
);
}
}
print_r($result); // transformed array
答案 2 :(得分:0)
如果我可以信任输入数组的结构模式,我可以为你提供一个光滑的单行(没有for / while循环)......
$input=array(
12 => "USD",
13 => "10150.00",
14 => "9850.00",
15 => "SGD",
16 => "8015.40",
17 => "7915.40",
18 => "HKD",
19 => "1304.60",
20 => "1288.60"
);
array_map(function($a)use(&$output){$output[$a[0]]=["Buy"=>$a[1],"Sell"=>$a[2]];},array_chunk($input,3));
var_export($output);
输出:
array (
'USD' =>
array (
'Buy' => '10150.00',
'Sell' => '9850.00',
),
'SGD' =>
array (
'Buy' => '8015.40',
'Sell' => '7915.40',
),
'HKD' =>
array (
'Buy' => '1304.60',
'Sell' => '1288.60',
),
)
以下是使用array_map()的array_chunk()功能细分:
array_map( // iterate each subarray from array_chunk()
function($a) // $a = each subarray
use(&$output){ // declare the output array as modifiable
$output[$a[0]]= // use 1st subarray value as key
["Buy"=>$a[1], // use 2nd subarray value as Buy value
"Sell"=>$a[2]]; // use 3rd subarray value as Sell value
},
array_chunk($input,3) // feed in an array of 3-element subarrays
);
延迟编辑(我认为我删除了一个可变参数函数,也提供了相同的输出):
array_map(function($K,$B,$S)use(&$output){$output[$K]=["Buy"=>$B,"Sell"=>$S];},...array_chunk($input,3));
巧合的是,两种单行方法都具有完全相同的字符长度,因此我认为这取决于个人偏好。