6

我有一个数组:

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

我已经完成了很多数组函数,但仍然坚持这一点。

4

3 回答 3

5

如果字段套件与以下内容相同:

  1. 货币
  2. 购买价值
  3. 卖出价值

然后,你可以这样做:

$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]
    );
}
于 2013-07-13T16:51:18.920 回答
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
于 2013-07-13T16:49:59.863 回答
0

由于输入数组的结构模式是可靠的,我可以提供一种功能性方法(没有 for/while 循环,全局空间中没有新变量)。

代码:(演示

var_export(
    array_reduce(
        array_chunk($input, 3),
        function($carry, $item) {
            $carry[$item[0]] = ["Buy" => $item[1], "Sell" => $item[2]];
            return $carry;
        },
        []
    )
);

输出:

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_chunk()从输入数组中创建一个包含 3 个连续元素的数组。
array_reduce()用于形成一个新的关联输出数组。

于 2017-04-30T14:58:32.263 回答