3

我如何爆炸这个字符串'||25||34||73||94||116||128' 我需要有一个这样的数组

array (
 0 => '25',
 1 => '34',
 2 => '73',
 3 => '94',
 4 => '116',
 5 => '128'
)

爆炸(“||”,$array);对我没用,我得到了这个数组

array (
 0 => '',
 1 => '25',
 2 => '34',
 3 => '73',
 4 => '94',
 5 => '116',
 6 => '128',
) 
4

6 回答 6

12
$array = explode('||', trim($string, '|'));
于 2010-03-19T11:33:38.310 回答
5

一个解决方案,特别是如果你可以在 string 中间有空值,可以使用preg_split和它的PREG_SPLIT_NO_EMPTY标志

$str = '||25||34||73||94||116||128';
$array = preg_split('/\|\|/', $str, -1, PREG_SPLIT_NO_EMPTY);
var_dump($array);

会给你 :

array
  0 => string '25' (length=2)
  1 => string '34' (length=2)
  2 => string '73' (length=2)
  3 => string '94' (length=2)
  4 => string '116' (length=3)
  5 => string '128' (length=3)


但是,如果您在字符串中间 永远不会有空值explode,那么使用会更快,即使您必须||在调用它之前删除字符串的开头和结尾。

于 2010-03-19T11:37:02.367 回答
2
$str='||25||34||73||94||116||128';
$s = array_filter(explode("||",$str),is_numeric);
print_r($s);

输出

$ php test.php
Array
(
    [1] => 25
    [2] => 34
    [3] => 73
    [4] => 94
    [5] => 116
    [6] => 128
)
于 2010-03-19T11:40:29.883 回答
1

由于您之前的一个问题是如何在 MySQL 中存储和更新这样的字符串......让我们假设您未来的任务之一是找出某个值是否在这个数组/字符串中或查找/计数此数组中具有特定值的所有记录。
在这种情况下,您可能希望现在开始规范化您的表格

于 2010-03-19T12:05:39.027 回答
0

除了已经提到的解决方案之外,您还可以在之后过滤掉空值:

$arr = array_filter(explode("||", $str), function($val) { return trim($val) === ""; });

此示例使用一个匿名函数,如果您不使用 PHP 5.3 或更高版本,则需要替换该函数,或者使用create_function

$arr = array_filter(explode("||", $str), create_function('$val', 'return trim($val) === "";'));

或者使用预定义的功能:

function isEmptyString($str) {
    return trim($str) === "";
}
$arr = array_filter(explode("||", $str), "isEmptyString");
于 2010-03-19T11:44:20.633 回答
0

你可以做:

explode('||',substr($str,2));
于 2010-03-19T11:36:20.253 回答