我有一个名为$name
的变量,它包含这样的内容:
$name = 'FName_LName_DataX_Number_www.website.com';
我想将Number
之前的所有数据放在一个数组中,而不是下划线和Number
值。
这样的事情:
$array[0] = 'Fname Lname DataX';
$array[1] = 'Number';
$name
示例:
$name = 'Roberto_Carlos_01_www.website.com';
$name = 'TV_Show_Name_785_www.website.com';
答案 0 :(得分:1)
使用正则表达式时,您的问题很特殊。但在任何时候有人提供这种解决方案时,有人会说regular expressions are evil!
。让我们玩一点:
$index = 0;
$array = array();
$array0 = array();
$array1 = array();
$name = 'FName_LName_DataX_002_www.website.com';
$aux = explode('_', $name);
if (is_array($aux))
{
foreach ($aux as $key => $value)
{
if (is_numeric($value))
{
$index = $key;
break;
}
}
foreach ($aux as $key => $value)
{
if ($key >= $index)
{
$array1[] = $value;
break;
} else
{
$array0[] = $value;
}
}
$array[0] = implode(' ', $array0);
$array[1] = implode(' ', $array1);
}
$name = 'TV_Show_Name_785_www.website.com';
result:
array (
0 => 'TV Show Name',
1 => '785',
)
$name = 'FName_LName_DataX_002_www.website.com';
result:
array (
0 => 'FName LName DataX',
1 => '002',
)
$name = 'Roberto_Carlos_01_www.website.com';
result:
array (
0 => 'Roberto Carlos',
1 => '01',
)
答案 1 :(得分:0)
你可能想在这里使用Regexp。试试这个:
<?php
$matches = array();
$name = 'Roberto_Carlos_01_www.website.com';
preg_match('/([^_]+)_([^_]+)_(\d+)_(.+)/', $name, $matches);
print_r($matches); // array elements 1-4 contain the sub-matches
?>
修改强>
抱歉,没有意识到输入是变量的。试试这个:
<?php
$array = array();
$matches = array();
$name = 'Roberto_Carlos_01_www.website.com';
preg_match('/([^\d]+)(\d+).+/', $name, $matches);
$array[0] = trim(str_replace('_', ' ', $matches[1])); // info before number
$array[1] = $matches[2]; // the number
print_r($array);
?>
答案 2 :(得分:-1)
首先,最好的方法是使用php explode()函数将这些数据放入数组
像这样使用:
<?
$data = explode("_" $name);
//Then get the data from the new array.
$array[0] = $data[0]." ".$data[1]." ".$data[2];
echo $array[0];
echo $data[3];
//Array index 3 would contain the number.
?>
这将获得包括数字在内的所有数据。希望这有帮助!