早上好!
我有一个字符串,每个月有不同数月,后跟一系列数字。我需要将该字符串分解为二维数组:第一列中的月份,后面是数字列。
我使用strtok,explode和一个月查找表制定了一些解决方案。但我的解决方案看起来非常麻烦。我希望有一个优雅,简单的解决方案,有一些真正的编码经验的人会使用。我的字符串,希望下面的2D数组结果。
感谢您的专业知识和时间!
DEC 14 1938.50 1964.50 1935.75 1959.75 21.75 1960.25 1551405 2751445 MAR 15 1931.00 1956.2 1928.0 1952.0 21.75 1952.50 2244 5495 JUN 15 1920.25 1949.0 1920.25 1945.0 22.00 1945.50 88 350 SEP 15 1925.00 1937.7 1925.00 1937.7 21.75 1938.75 6 204 DEC 15 1935.75 1935.75 1935.75 1935.75 22.00 1932.75 1 212
结束: DEC 14 1938.50 1964.50 1935.75 1959.75 21.75 1960.25 1551405 2751445 MAR 15 1931.00 1956.2 1928.0 1952.0 21.75 1952.50 2244 5495 等...
答案 0 :(得分:0)
以下应该可以解决问题:
$data = "DEC 14 1938.50 1964.50 1935.75 1959.75 21.75 1960.25 1551405 2751445 MAR 15 1931.00 1956.2 1928.0 1952.0 21.75 1952.50 2244 5495 JUN 15 1920.25 1949.0 1920.25 1945.0 22.00 1945.50 88 350 SEP 15 1925.00 1937.7 1925.00 1937.7 21.75 1938.75 6 204 DEC 15 1935.75 1935.75 1935.75 1935.75 22.00 1932.75 1 212";
$dataArray = preg_split('|\s+|', $data);
$table = array();
$idx = -1; // -1 because the first array index should be 0
foreach ($dataArray as $elem)
{
if (preg_match('|^[A-Z]{3}$|', $elem))
{
$table[++$idx] = array('month' => $elem, 'values' => array());
}
elseif (isset($table[$idx])) // in case the first word is not a month
{
$table[$idx]['values'][] = $elem;
}
}
这给出了以下结果:
Array
(
[1] => Array
(
[month] => DEC
[values] => Array
(
[0] => 14
[1] => 1938.50
[2] => 1964.50
[3] => 1935.75
[4] => 1959.75
[5] => 21.75
[6] => 1960.25
[7] => 1551405
[8] => 2751445
)
)
[2] => Array
(
[month] => MAR
[values] => Array
(
[0] => 15
[1] => 1931.00
[2] => 1956.2
[3] => 1928.0
[4] => 1952.0
[5] => 21.75
[6] => 1952.50
[7] => 2244
[8] => 5495
)
)
…
)
注意:使用月份作为键的更简单的数组结构将不起作用,因为有些月份会出现多次(例如DEC
),并且值将被覆盖。