如何处理此字符串并从中提取数据

时间:2016-08-11 07:55:54

标签: php explode

$string='eDreams 459   Travel Up 464   AirAfrica 464   Available at  459  Available at  464  Available at  464  Available at  473  Available at  478  Available at  479  Available at  498';
how to get data like:
array =
  0 => string 'eDreams' (length=6)
  1 => string '459'
array=
  0 => string 'Travel Up' (length=6)
  1 => string '464'
array = 
  0 => string 'AirAfrica' (length=6)
  1 => string '464'

怎么做这个我试过这个爆炸它工作正常但不准确帮助我好吗?

4 个答案:

答案 0 :(得分:1)

我找到了一种方式......它并不漂亮。我希望它可以帮助你。

<?php
$string = "eDreams 459   Travel Up 464   AirAfrica 464   Available at  459  Available at  464  Available at  464  Available at  473  Available at  478  Available at  479  Available at  498";
$array = explode(" ", $string);
$final_array = array();
$found = false;
foreach ($array as $value) {
    if (ctype_digit($value)){
        $final_array[count($final_array)-1][] = (int)$value;
        $found = false;
    } else {
        if ($found == false){
            $final_array[] = array($value);
            $found = true;
        } else {
            $final_array[count($final_array)-1][0] .= " " . $value;
        }
    }
}
print_r($final_array);
?>

我不会使用这样的东西。也许你可以直接从db获得更好的结果。

答案 1 :(得分:1)

我已经提出了这个解决方案......

$string = 'eDreams 459   Travel Up 464   AirAfrica 464   Available at  459  Available at  464  Available at  464  Available at  473  Available at  478  Available at  479  Available at  498';

$arr = [ ]; 

$name = '';

$number = '';

$count = strlen( $string );

$reset = 0;

for ( $i = 0; $i < $count; $i++ )
{
    if ( is_numeric( $string[ $i ] ) )
    {
        $reset = 1;
        $number.= $string[ $i ];
    }
    else
    {
       if ( $reset == 1 )
        {
            $arr[] = [ trim( $name ), trim( $number ) ];
            $name = '';
            $number = '';
            $reset = 0;
        }
        else
        {
            $name.= $string[ $i ];
        }
    }
}
print_r( $arr );

答案 2 :(得分:0)

您希望隔离到单独数组中的元素由多个空格或制表符移位分隔,并且数组元素本身由单个空格分隔。如果字符串实际上是以这种方式格式化的,则可以使用split()函数将这些元素拉入数组或多个数组中。例如:

$split_pattern = "   ";
$array = split($split_pattern, $string);

这将导致数组看起来像:

array =
   0 => string 'eDreams 459'
   1 => string 'Travel Up 464'
   ...
   4 => string 'Available at'
   5 => string '459'
   etc...

您需要再次split()这些数组元素,以创建格式为0 => name, 1 => number的数组。

要处理available at条目,您可以使用array_keys()函数:

$pattern = "Available at";
$availables = array_keys($array, $pattern);
foreach ($availables as $available){
    $availableAt = $array[$available];
    $availableNum = $array[$available + 1];
}

因此,$availableAt始终为"Available at",但$availableNum将包含数字,该数字只是您最初split()数组中的下一个元素。有几种方法可以实现这一目标,但我认为这将是最明确的。

参考文献:

答案 3 :(得分:0)

试试这个:

        private Dictionary<string, Dictionary<string, Packet>> PacketsStore = new Dictionary<string, Dictionary<string, Packet>>();