PHP问题 - 如何用字符串创建数组?

时间:2010-07-01 15:29:25

标签: php arrays explode

在我的数据库中,某些字段设置被序列化并存储。当我这样做时:

print_r(unserialized($r['settings']));

我会得到这个:

Array ( 
[prefix] => 
[suffix] => 
[min] => 
[max] => 
[allowed_values] => 1|Common 2|Rare 3|Almost Extinct 
)

我正在尝试根据allowed_values的值创建一个数组,如下所示:

Array (
[1] => Common
[2] => Rare
[3] => Almost Extinct
)

问题是,当我使用explode(“|”,$ r ['allowed_values'])时,我得到:

Array(
[0] => 1
[1] => Common 2
[2] => Rare 3
[3] => Almost Extinct
)

哪个有道理,但显然不是我所希望的......所以,我只是想知道是否有一种简单的方法来做我在这里尝试的事情?我想过多次使用爆炸,一次用于空间,一次用于管道,但由于“几乎灭绝”中的空间而无法使用......

4 个答案:

答案 0 :(得分:3)

试试这个:

 $tab=array();
 preg_match_all("/\s*(\d+)\|([^\d]+)/",$r['allowed_values'],$tab);
 print_r(array_combine($tab[1],$tab[2]));

这应该成功:)

答案 1 :(得分:2)

如果原始索引不是从1顺序,并且您需要保持它们原样,请参阅dweeves answer,因为这样可以使索引和值保持正确绑定在一起。

$string = unserialized($r['settings']['allowed_values']);
//$string = '1|Common 2|Rare 3|Almost Extinct';

print_r (preg_split("/\d+\|/", $string, -1, PREG_SPLIT_NO_EMPTY));

输出:

Array
(
    [0] => Common 
    [1] => Rare 
    [2] => Almost Extinct
)

答案 2 :(得分:0)

我认为这应该有效。 这会拆分第一个数字和“|”炭

<?php
$string = "1|Faruk 2|Test";
$array = preg_split('/\d/', $string, -1, PREG_SPLIT_NO_EMPTY); 
$content = explode("|", implode($array));

var_dump($content);
?>

这是结果

array(3) {
  [0]=>
  string(0) ""
  [1]=>
  string(6) "Faruk "
  [2]=>
  string(4) "Test"
}

答案 3 :(得分:0)

我会使用正则表达式来匹配每个条目的模式,但只捕获感兴趣的文本。使用preg_match_all(...)$match对象将填充捕获组的子数组。

$input = '1|Common 2|Rare 3|Almost Extinct';
preg_match_all('/\d+\|([^\d]+)/',$input, $match);
print_r($match[1]);

产地:

Array
(
    [0] => Common 
    [1] => Rare 
    [2] => Almost Extinct    
)

请注意,如果你的标签会使用数字,你需要调整正则表达式。

如果表中存储的值可能出现故障,此方法还允许您捕获数字并创建自己的有序数组。