3
ここでは論理的な問題に直面していると確信しています。特定の値が指定された配列と一致するときに、多次元配列からキーを削除します。
私はこのような配列があります:私はinf:name
は、指定された名前と一致したときに、いくつかのキーを削除したい
var_export($myarray);
array (
0 =>
array (
'inf:name' => 'aaa',
'inf:value' => '111',
'inf:children' => NULL,
),
1 =>
array (
'inf:name' => 'bbb',
'inf:value' => '222',
'inf:children' => NULL,
),
2 =>
array (
'inf:name' => 'ccc',
'inf:value' => '333',
'inf:children' => NULL,
),
3 =>
array (
'inf:name' => 'bob',
'inf:children' =>
array (
0 =>
array (
'inf:name' => 'ddd',
'inf:value' => '444',
'inf:children' => NULL,
),
),
),
4 =>
array (
'inf:name' => 'data',
'inf:children' =>
array (
0 =>
array (
'inf:name' => 'eee',
'inf:value' => '555',
'inf:children' => NULL,
),
1 =>
array (
'inf:name' => 'steve',
'inf:value' => 'bar1',
'inf:children' => NULL,
),
2 =>
array (
'inf:name' => 'john',
'inf:value' => 'bar2',
'inf:children' => NULL,
),
3 =>
array (
'inf:name' => 'peter',
'inf:value' => 'bar3',
'inf:children' =>
array (
0 =>
array (
'inf:name' => 'fff',
'inf:value' => '666',
'inf:children' => NULL,
),
),
),
),
),
)
//Or using print_r()
print_r($myarray);
Array
(
[0] => Array
(
[inf:name] => aaa
[inf:value] => 111
[inf:children] =>
)
[1] => Array
(
[inf:name] => bbb
[inf:value] => 222
[inf:children] =>
)
[2] => Array
(
[inf:name] => ccc
[inf:value] => 333
[inf:children] =>
)
[3] => Array
(
[inf:name] => bob
[inf:children] => Array
(
[0] => Array
(
[inf:name] => ddd
[inf:value] => 444
[inf:children] =>
)
)
)
[4] => Array
(
[inf:name] => data
[inf:children] => Array
(
[0] => Array
(
[inf:name] => eee
[inf:value] => 555
[inf:children] =>
)
[1] => Array
(
[inf:name] => steve
[inf:value] => bar1
[inf:children] =>
)
[2] => Array
(
[inf:name] => john
[inf:value] => bar2
[inf:children] =>
)
[3] => Array
(
[inf:name] => peter
[inf:value] => bar3
[inf:children] => Array
(
[0] => Array
(
[inf:name] => fff
[inf:value] => 666
[inf:children] =>
)
)
)
)
)
)
を。
function array_cleanup($array, $todelete)
{
foreach($array as $key => $value)
{
if(is_array($value))
{
$array[$key] = array_cleanup($array[ $key ], $todelete);
} else {
if(sizeOf($todelete) > 0)
{
if (in_array($value[ 'inf:name' ], $todelete))
unset($array[ $key ]);
}
}
}
return $array;
}
$newarray = array_cleanup($myarray, array("aaa", "peter", "ccc"));
所望の出力がなければなりません:
は、ここに私のテスト関数である
var_dump($newarray);
array (
0 =>
array (
'inf:name' => 'bbb',
'inf:value' => '222',
'inf:children' => NULL,
),
2 =>
array (
'inf:name' => 'bob',
'inf:children' =>
array (
0 =>
array (
'inf:name' => 'ddd',
'inf:value' => '444',
'inf:children' => NULL,
),
),
),
4 =>
array (
'inf:name' => 'data',
'inf:children' =>
array (
0 =>
array (
'inf:name' => 'eee',
'inf:value' => '555',
'inf:children' => NULL,
),
1 =>
array (
'inf:name' => 'steve',
'inf:value' => 'bar1',
'inf:children' => NULL,
),
2 =>
array (
'inf:name' => 'john',
'inf:value' => 'bar2',
'inf:children' => NULL,
),
),
),
)
//or using print_r();
print_r($newarray);
Array
(
[1] => Array
(
[inf:name] => bbb
[inf:value] => 222
[inf:children] =>
)
[2] => Array
(
[inf:name] => bob
[inf:children] => Array
(
[0] => Array
(
[inf:name] => ddd
[inf:value] => 444
[inf:children] =>
)
)
)
[3] => Array
(
[inf:name] => data
[inf:children] => Array
(
[0] => Array
(
[inf:name] => eee
[inf:value] => 555
[inf:children] =>
)
[1] => Array
(
[inf:name] => steve
[inf:value] => bar1
[inf:children] =>
)
[2] => Array
(
[inf:name] => john
[inf:value] => bar2
[inf:children] =>
)
)
)
)
$newarray
キーをリセットする必要があります。後で他の問題に直面する可能性があるからです。
ありがとうございます。
深い 'infファイルができますどのように多くのレベル:ネストすることchildren'? – thirtydot
@stereofrog:check update、@thirtydot:それは4つ以上のレベルであってはなりませんが、関数はすべての入力に適応できるように再帰的に呼び出されるべきだと思います。 – Cybrix
はxmlの配列ですか? – ajreal