我有一个正在构建的数组:
$features_data[$i] = preg_split("/\n/", $row);
输出如下:
Array
(
[0] => Array
(
[0] =>
[1] =>
[2] => <img src="http://example.com/sites/test/files/imagecache/feature-image/testimage_0.jpg" alt="" title="" class="imagecache imagecache-feature-image imagecache-default imagecache-feature-image_default" width="654" height="260" />
[3] =>
[4] =>
[5] =>
[6] => Test 1
[7] =>
[8] =>
[9] =>
[10] => Lorem ipsum dolor sit...
[11] =>
[12] =>
)
[1] => Array
(
[0] =>
[1] =>
[2] =>
[3] =>
[4] =>
[5] =>
[6] => Test 2
[7] =>
[8] =>
[9] =>
[10] => Aenean id tellus nec...
[11] =>
[12] =>
)
[2] => Array
(
[0] =>
[1] =>
[2] =>
[3] =>
[4] =>
[5] =>
[6] => Test 3
[7] =>
[8] =>
[9] =>
[10] => Maecenas ut pharetra...
[11] =>
[12] =>
)
)
我想摆脱空白数组项,然后重置数组计数器。我试过使用php未设置但由于某种原因它不起作用。任何帮助将不胜感激。
答案 0 :(得分:3)
您可以使用array_filter()
,但您真正想要使用的是PREG_SPLIT_NO_EMPTY
。
preg_split("/\n/", $row, -1, PREG_SPLIT_NO_EMPTY)
编辑:当然这完全取决于你的输出。你的模式应该是这样的
preg_split("/[\\n\\r \\t]+/", $row, -1, PREG_SPLIT_NO_EMPTY)
或者
preg_split("/[\\n\\r \\t]*\\n[\\n\\r \\t]*/", $row, -1, PREG_SPLIT_NO_EMPTY)
答案 1 :(得分:0)
我知道你想这样做:
$array = array(null, null, 'Test', null, null);
$output = array_values(array_filter($array));
var_dump($output);
输出:
array(1) {
[0]=>
string(4) "Test"
}
如果没有回调传递给array_filter
,它只返回未评估为false的值。值将被类型化,因此0
为false,''
或null
也是如此。请记住,preg_split
生成的数组可能包含控制字符。如果结果数组var_dumps不是上面给出的,请尝试将preg_split
中的模式更改为'/'.PHP_EOL.'/'
。
Alson请注意,出于性能原因,您要么使用带有标记的单preg_split
(在另一个答案中给出),要么使用array_values
加array_filter
加explode
。使用array_values
加array_filter
加preg_split
的速度比其他两种替代方案慢两倍,后者大致相同。
$str = <<< TXT
Test
Foo
Bar
TXT;
使用
进行测试$start = microtime(true);
for($i=0; $i<100000; $i++) {
array_values(array_filter(explode(PHP_EOL, $str)));
}
echo microtime(true) - $start, PHP_EOL; // 0.60249495506287
$start = microtime(true);
for($i=0; $i<100000; $i++) {
array_values(array_filter(preg_split("/".PHP_EOL."/", $str)));
}
echo microtime(true) - $start, PHP_EOL; // 1.0394451618195
$start = microtime(true);
for($i=0; $i<100000; $i++) {
preg_split("/".PHP_EOL."/", $str, -1, PREG_SPLIT_NO_EMPTY);
}
echo microtime(true) - $start, PHP_EOL; // 0.60252904891968