0

次のようなPHP配列があります。

$errors = array('Price'=>array('not a positive decimal number'=> 1), 'TaxYear'=>array('not a positive integer'=>1, 'not 4 digits'=>1), 'Address'=>array(''=>1), 'State'=>array('not 2 letters'=>1, ''=>1), 'ListDate'=>array(''=>1, 'some test'=>1, ''=>1));

echo '$errors:<pre>' . print_r($errors,1) . '</pre>';

Array
(
[Price] => Array
    (
        [not a positive decimal number] => 1
    )

[TaxYear] => Array
    (
        [not a positive integer] => 1
        [not 4 digits] => 1
    )

[Address] => Array
    (
        [] => 1
    )

[State] => Array
    (
        [not 2 letters] => 1
        [] => 1
    )

[ListDate] => Array
    (
        [] => 1
        [some test] => 1
    )

)

目標は、この配列から次のような別の配列を作成することです。

Array
(
[Price] => Array
    (
        [not a positive decimal number] => 1
    )

[TaxYear] => Array
    (
        [not a positive integer] => 1
        [not 4 digits] => 1
    )

[State] => Array
    (
        [not 2 letters] => 1
    )

[ListDate] => Array
    (
        [some test] => 1
    )

)

基本的に、要素名として [] を持つネストされた配列内のすべての要素を削除する必要があります。外側の配列のいずれかのキーにエラーが 1 つしかなく、そのエラーの要素名が [] の場合、外側の配列のキーも削除する必要があります (これについては、例の [Address] を参照してください)。これを達成するための最良の方法は何ですか?

4

4 に答える 4

0
$errors = array('Price'=>array('not a positive decimal number'=> 1), 'TaxYear'=>array('not a positive integer'=>1, 'not 4 digits'=>1), 'Address'=>array(''=>1), 'State'=>array('not 2 letters'=>1, ''=>1), 'ListDate'=>array(''=>1, 'some test'=>1, ''=>1));


$filterOnKeys = function($x)
                {
                    $r = array(); 
                    foreach($x as $k=>$v) 
                        if($k) $r[$k]=$v; 
                    return $r;
                };

$return = array_filter(array_map($filterOnKeys, $errors));

echo '$return:<pre>' . print_r($return,true) . '</pre>';
于 2013-11-10T20:34:29.297 に答える