簡體   English   中英

刪除整個數組元素,其中數組元素鍵數 < 2 in PHP

[英]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
        )

)

PHP 小提琴

我相信您正在嘗試取消設置 "$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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM