5

現在の配列:

Array (
    [name] => Array (
        [name1] => Array (
            [0] => some value1
        )
        [name2] => Array (
            [0] => some value2
        )
        [name3] => Array (
            [0] =>
        )
) 

必要な配列:

Array (
    [name] => Array (
        [name1] => Array (
            [0] => some value1
        )
        [name2] => Array (
            [0] => some value2
        )
) 

name3[0]には値が含まれていないため、削除する必要があります。私が読んだことから、array_filterこれを使用する必要がありますが、機能させることができません。

4

3 に答える 3

5

再帰関数。入力配列からすべての空の値と空の配列を削除します。

//clean all empty values from array
function cleanArray($array)
{
    if (is_array($array))
    {
        foreach ($array as $key => $sub_array)
        {
            $result = cleanArray($sub_array);
            if ($result === false)
            {
                unset($array[$key]);
            }
            else
            {
                $array[$key] = $result;
            }
        }
    }

    if (empty($array))
    {
        return false;
    }

    return $array;
}

この例でテストしましたが、配列の深さに関係なく機能します。

$array = array(
    'name' => array(
        'name1' => array(0 => 1),
        'name2' => array(0 => 3, 1 => array(5 => 0, 1 => 5)),
        'name3' => array(0 => '')
    )
);

お役に立てれば :)

于 2013-07-25T21:53:01.157 に答える
5

各配列要素のサブ要素が空かarray_filterどうかを判断する述語 (関数)をフィードする必要があります。[0]そう:

$array = array_filter($array, function($item) { return !empty($item[0]); });

emptyあまりうるさいわけではないことに注意してください。[0]サブ要素が空の文字列、、、falseまたはでnullあるアイテムを削除することになります。サブ要素をまったく持たないアイテムも削除されます。より外科的に対象を絞ったものが必要な場合は、テストを微調整する必要があります。0"0"[0]

于 2013-07-25T21:25:24.700 に答える
2

再帰関数を使用して実現できます。

$arr = array('test', array('',0,'test'), array('',''));

print_r(clean_array($arr));

function clean_array($array, $isRepeat = false) {
    foreach ($array as $key => $value) {
        if ($value === null || $value === '') { unset($array[$key]); }
        else if (is_array($value)) {
            if (empty($value)) { unset($array[$key]); }
            else $array[$key] = clean_array($value);
        }
    }
    if (!$isRepeat) {
        $array = clean_array($array,true);
    }
    return $array;
}
于 2013-07-25T21:36:52.203 に答える