Так что я пытаюсь анализировать свои имена столбцов с помощью следующей функцииПроблема с StrPos, STRLEN и зиЬзЬг
function disectColumnName($columnName){
echo "fieldname: " .$columnName. "<br>";
$periodLengths = array("min","hr","dy","wk"); # Array of periodLength Options
$periodLength = $periodLengths[array_search($columnName, $periodLengths)]; # Find which periodLength is used in columnName and sa
$periodDuration = substr($columnName, 0, strpos($columnName,$periodLength));
echo 'periodLength: '.$periodLength . "<br>";
echo 'periodDuration: '.$periodDuration . "<br>";
$movingAverages = array("e","s");
$movingAverageLoc = $movingAverages[array_search($columnName, $movingAverages)];
echo "movingAverageLoc: " .$movingAverageLoc . "<br>";
$startOfString = strpos($columnName,$periodLength)+strlen($periodLength);
$stringLength = strpos($columnName,$movingAverageLoc)-(strpos($columnName,$periodLength)+strlen($periodLength));
# strpos($columnName,$movingAverageLoc) returns blank, should return strpos when movingAverages = "S"
echo "StartOf: ". $startOfString . "<br>";
echo "StrLen: ". $stringLength . "<br>";
$movingAverage = substr($columnName,$startOfString,$stringLength);
echo 'movingAverage: '.$movingAverage;
}
disectColumnName
находится в цикле, которые обрабатывают с помощью следующего массива заголовков столбцов -
array(12) { [0]=> string(7) "14min3e" [1]=> string(7) "14min4e" [2]=> string(8) "14min41e" [3]=> string(7) "14min3s" [4]=> string(8) "14min41s" [5]=> string(8) "14min32s" [6]=> string(9) "14min321s" [7]=> string(9) "15min321s" [8]=> string(8) "15min41s" [9]=> string(9) "15min321e" [10]=> string(8) "15min41e" [11]=> string(8) "15min32e" }
проблема заключается в том, что заголовки столбцов, заканчивающиеся в 's'
не создают правильный StringLength
или movingAverageLoc
(он показывает e
вместо S
). Однако, если имя столбца заканчивается на 'e'
, оно отлично работает, что дает?
Вот что в настоящее время вывода:
fieldname: 14min3e
periodLength: min
periodDuration: 14
movingAverageLoc: e
StartOf: 5
StrLen: 1
movingAverage: 3
fieldname: 14min4e
periodLength: min
periodDuration: 14
movingAverageLoc: e
StartOf: 5
StrLen: 1
movingAverage: 4
fieldname: 14min41e
periodLength: min
periodDuration: 14
movingAverageLoc: e
StartOf: 5
StrLen: 2
movingAverage: 41
fieldname: 14min3s
periodLength: min
periodDuration: 14
movingAverageLoc: e
StartOf: 5
StrLen: -5
movingAverage:
fieldname: 14min41s
periodLength: min
periodDuration: 14
movingAverageLoc: e
StartOf: 5
StrLen: -5
movingAverage:
fieldname: 14min32s
periodLength: min
periodDuration: 14
movingAverageLoc: e
StartOf: 5
StrLen: -5
movingAverage:
fieldname: 14min321s
periodLength: min
periodDuration: 14
movingAverageLoc: e
StartOf: 5
StrLen: -5
movingAverage:
fieldname: 15min321s
periodLength: min
periodDuration: 15
movingAverageLoc: e
StartOf: 5
StrLen: -5
movingAverage:
fieldname: 15min41s
periodLength: min
periodDuration: 15
movingAverageLoc: e
StartOf: 5
StrLen: -5
movingAverage:
fieldname: 15min321e
periodLength: min
periodDuration: 15
movingAverageLoc: e
StartOf: 5
StrLen: 3
movingAverage: 321
fieldname: 15min41e
periodLength: min
periodDuration: 15
movingAverageLoc: e
StartOf: 5
StrLen: 2
movingAverage: 41
fieldname: 15min32e
periodLength: min
periodDuration: 15
movingAverageLoc: e
StartOf: 5
StrLen: 2
movingAverage: 32
Это может быть гораздо проще, если бы вы смотрели на sscanf PHP() функции - http://www.php.net/manual/ en/function.sscanf.php - что позволит вам анализировать ваше жало в одной строке кода –
Я предполагаю, что 'array_search ($ columnName, $ movingAverages)' всегда возвращает false (отличает от 0 и т. д.), поскольку '$ columnName' является _never_ 'e' или 's', но всегда что-то предшествует ему, поэтому оно не будет найдено в '$ movingAverages'. – Wrikken
Hah, я был почти готов предлагать регулярные выражения ... Но предложение Mark Bakers - _spot on_ :) – Wrikken