Anında unset boş dizi ürün

2 Cevap php

Ben kullanılarak inşa ediliyor bir dizi var:

$features_data[$i] = preg_split("/\n/", $row);

Aşağıdaki gibi çıktı:

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] => 
        )

)

Ben boş dizi öğeleri kurtulmak ister ve daha sonra dizi sayacını sıfırlamak istiyorum. Ben unset php kullanarak denedim ama nedense çalışmıyor. Herhangi bir yardım büyük mutluluk duyacağız.

Teşekkürler

2 Cevap

Ben bunu yapmak istiyorum anlamak:

$array = array(null, null, 'Test', null, null);
$output = array_values(array_filter($array));
var_dump($output);

çıkışlar:

array(1) {
  [0]=>
  string(4) "Test"
}

Hiçbir arama array_filter, sadece değerler dönecektir yanlış değerlendirmek değil geçirilen zaman. Değerler typecasted, yani '' veya null gibi 0, yanlış olacaktır. Lütfen gelen edilen dizisi preg_split kontrol karakter içerebileceği konusunda da aklınızda bulundurun. Yukarıda verildiği gibi elde edilen dizi değil var_dumps takdirde, '/'.PHP_EOL.'/' için preg_split olarak desenini değiştirmek için çalışın.

(Başka bir cevap verildiği gibi) bayrak veya array_values artı array_filter artı explode ile tek preg_split kullanmak istiyorsanız ya Alson notu performans nedenlerle. array_values artı array_filter kullanarak artı preg_split, yaklaşık aynı performansı diğer iki alternatiften, ya 2 kat daha yavaştır.


$str = <<< TXT

Test

Foo

Bar

TXT;

Ile test

$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