0

私の配列は次のようになります。

Array
(
[1] => Array
    (
        [0] => /webmail/
        [1] => 42024
        [2] => 246538196
        [3] => 72
        [4] => 70
    )

[2] => Array
    (
        [0] => /public/index.php
        [1] => 6022
        [2] => 2575777
        [3] => 40
        [4] => 153
    )

[3] => Array
    (
        [0] => /
        [1] => 293
        [2] => 5326453
        [3] => 184
        [4] => 76
    )

[4] => Array
    (
        [0] => /webmail/skins/larry/watermark.html
        [1] => 248
        [2] => 40225
        [3] => 0
        [4] => 2
    )

[5] => Array
    (
        [0] => /webmail/program/resources/blank.tif
        [1] => 182
        [2] => 29406
        [3] => 0
        [4] => 1
    )

など....tif/.js/.css/.woffで終わるすべての要素を削除したいときは、次を使用します:

$key = array_search('*.tif',$sider); // for example for .tif
unset($sider[$key]);

しかし、それは動作しません! 私のコードの問題と、.tif/ .js/ .css/ .woff で終わるすべての文字列のような複数の条件で削除する方法。

ありがとう

4

4 に答える 4

4

array_search配列の各要素は配列であり、配列は「*.tif」と一致しないため、機能しません。また、 のarray_searchようなワイルドカードはサポートしていません*。ここでは、配列フィルターが典型的なアプローチです。

$sider = array_filter($sider, function (array $element) {
    return !preg_match('/\.tif$/i', $element[0]);
});
于 2014-02-20T09:53:10.523 に答える
1
<?php

function removeDeep($array, $pattern) {

    $r = array();

    if (!is_array($array)) {
        trigger_error(__FUNCTION__ . ' expected paramater 1 to be an array.', E_USER_WARNING);
        return false;
    }

    foreach ($array as $key => $value) {

        if (is_array($value)) {
            $r[$key] = call_user_func(__FUNCTION__, $value, $pattern);
            continue;
        }

        if (!preg_match($pattern, $value)) {
            $r[$key] = $value;
        }

    }

    return $r;

} 

$sider = removeDeep( $sider, "*.tif");
?> 
于 2014-02-20T10:00:42.787 に答える