[英]Remove the whole array elements, where array element key count < 2 in PHP
下面是我的代碼 output 這個數組:
// update users
$where_in = array('1102','');
$admin_data = $this->db->select('id,email,domain')->where_in('id',$where_in)->get('users')->result();
echo "<pre>";print_r($admin_data);
當前 output 數組
1102,
Array
(
[0] => stdClass Object
(
[id] => 1
)
)
1111,
Array
(
[0] => stdClass Object
(
[id] => 1132
)
[1] => stdClass Object
(
[id] => 1133
)
)
我試圖通過這樣做來完成,但沒有得到預期的結果。
foreach ($admin_data as $key) {
if (count($admin_data) < 2) {
unset($admin_data);
}
}
預期結果:我想刪除整個數組元素,其中數組鍵小於 2。我希望只獲得鍵數超過 1 的數組,如下所示:
1111,
Array
(
[0] => stdClass Object
(
[id] => 1132
)
[1] => stdClass Object
(
[id] => 1133
)
)
我不確定我是否理解,但是如果你有一個 arrays 的數組並且想要刪除少於 2 個元素的內部 arrays,你可以這樣做:
<?php
$original = [
["a"],
["b", "c"],
];
$filtered = array_filter(
$original,
function ($innerArray) {
return count($innerArray) >= 2;
}
);
print_r($filtered);
結果是
Array
(
[1] => Array
(
[0] => b
[1] => c
)
)
我相信您正在嘗試取消設置 "$admin_data" 數組中的元素,但是您在數組本身上調用了unset
。 如果將數組元素的索引與元素本身一起傳遞到循環中,則可以檢查元素是否少於兩個內部元素,並相應地取消設置該元素。
$elementsToRemove = [];
foreach($admin_data as $index => $key) {
if (count($key) < 2) {
$elementsToRemove[] = $index;
}
}
$newArray = array_diff_key($admin_data, array_flip($elementsToRemove));
再次檢查你的代碼,它包含一些邏輯問題:
foreach ($admin_data as $key) {
if (count($admin_data) < 2) {
unset($admin_data);
}
}
如果$admin_data
有一項,則if (count($admin_data) < 2)
測試為真且unset($admin_data);
被執行。 這意味着(簡化) $admin_data
的所有內容都被刪除。
如果$admin_data
有兩個或更多項,則if (count($admin_data) < 2)
測試永遠不會為真。 每次迭代都是如此。
這兩種情況都不符合邏輯,因為您不需要foreach
循環來使該測試起作用。 此外,您可能不想刪除$admin_data
內容。
您需要做的是遍歷$admin_data
項目,檢查該項目以查看它是否是一個數組,如果該數組有一項,則從$admin_data
數組中刪除該項目。 或者您可以創建另一個僅包含有效項目的數組。
這是兩者的可能示例:
/* unset the item if it is an array with one item */
foreach ($admin_data as $key => $value) {
if (is_array($value) && count($value) === 1) {
unset($admin_data[$key]);
}
}
/* create a new array with the valid items */
$valid_admin_data = [];
foreach ($admin_data as $key => $value) {
if (is_array($value) && count($value) > 1) {
$valid_admin_data[$key] = $value;
}
}
我還建議您再次閱讀foreach 文檔。 此外,與變量名稱保持一致,因為它有助於避免誤解:例如, foreach ($admin_data as $key)
可以更好地命名為foreach ($admin_data as $value)
,因為使用一個變量,您可以提取值當前項目。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.