[英]Php Array_filter to unset key values from array of arrays
我想從嵌套數組數組中取消設置數組元素。
我想執行遞歸數組過濾器,我不確定如何有效地做到這一點。
下面是原始數組。
[
[a] => 3
[b] => 0
[c] => [
[
[1] => aa
[2] => 1
[3] => [
[
[a1] => 6
[a2] => 5781
[a3] =>
[
[1] => 0
[2] => 19550
[3] => 5781
]
]
[
[a1] => 1
[a2] => 5781
[a3] =>[
[1] => 0
[2] => 19550
[3] => 5781
]
]
]
]
[
[1] => aa
[2] => 1
[3] => [
[
[a1] => 6
[a2] => 5781
[a3] =>
[
[1] => 0
[2] => 19550
[3] => 5781
]
]
[
[a1] => 1
[a2] => 5781
[a3] =>[
[1] => 0
[2] => 19550
[3] => 5781
]
]
]
]
]
]
預期數組
[
[a] => 3
[c] => [
[
[1] => aa
[3] => [
[
[a1] => 6
[a3] =>
[
[2] => 19550
[3] => 5781
]
]
[
[a1] => 1
[a3] =>[
[2] => 19550
[3] => 5781
]
]
]
]
[
[1] => aa
[3] => [
[
[a1] => 6
[a3] =>
[
[2] => 19550
[3] => 5781
]
]
[
[a1] => 1
[a3] =>[
[2] => 19550
[3] => 5781
]
]
]
]
]
]
如您所見,在每個嵌套數組的預期數組中,一些鍵值對已被刪除。 我需要根據鍵名過濾數組。 那是我的鍵名是固定的,需要從里面的每個子數組中刪除。
任何幫助將不勝感激。
這是一個基於遞歸foreach解決方案的示例,該解決方案使用您提供的數據集處理代碼。
$sourceArray = array("a" => 3, "b" => 0, "c" => array("1" => "aa", "2" => 1, "3" => array("a1" => 6, "a2" => 5781, "a3" => array("1" => 0, "2" => 19550, "3" => 5781)), array( "a1" => 1, "a2" => 5781, "a3" =>array("1" => 0, "2" => 19550, "3" => 5781 ))), array( "1" => "aa", "2" => 1, "3" => array( array( "a1" => 6, "a2" => 5781, "a3" => array( "1" => 0, "2" => 19550,"3" => 5781))), array( "a1" => 1, "a2" => 5781, "a3" =>array( "1" => 0, "2" => 19550, "3" => 5781))));
print_r($sourceArray,1);
function removeKeys($keys, $sourceData) {
foreach ($sourceData as $key=>$val) {
if (in_array($key, $keys, true)) {
unset($sourceData[$key]);
} else if (is_array($val)) {
$sourceData[$key] = removeKeys($keys, $sourceData[$key]);
}
}
return $sourceData;
}
$keysToRemove = array("b","2","a2");
$newArray = removeKeys($keysToRemove, $sourceArray);
print_r($newArray);
盡管獲取數據有點困難,但實現起來很簡單。 我確實在此示例中注意到一個“錯誤”,因為如果鍵在原始數組中為“ 0”,即使它不在$ keys數組中,它仍然會被刪除。
但是我假設此示例足以回答您的問題,並且不會發生我陳述的邊緣情況(即,“ 0”不是數組中的鍵值。)如果您確實使用“ 0”作為鍵,可以添加其他邏輯來捕獲這種情況,但這會使功能變慢一點,因此我將把選擇權留給您。
(注意,上面提到的錯誤現在和代碼中已修復。請參見下面的注釋,以獲取原始海報的解決方案)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.