从数组中只获取非数字键的简单方法


Simple way to get only non-numeric keys from an array

所以我有一个PHP数组,如下所示:

Array
(
    [0] => Array
        (
            [offset] => 1
            [0] => 1
            [name] => Value:990937970
            [1] => Value:990937970
        )
    [1] => Array
        (
            [offset] => 2
            [0] => 2
            [name] => Value:482758260
            [1] => Value:482758260
        )
    [2] => Array
        (
            [offset] => 3
            [0] => 3
            [name] => Value:2045053536
            [1] => Value:2045053536
        )
)

但我想更改它,这样就不会返回数字键,比如:

Array
(
    [0] => Array
        (
            [offset] => 1
            [name] => Value:990937970
        )
    [1] => Array
        (
            [offset] => 2
            [name] => Value:482758260
        )
    [2] => Array
        (
            [offset] => 3
            [name] => Value:2045053536
        )
)

我的问题:有没有一种简单的方法(没有foreachwhile循环)可以去掉这些数字键?

我知道我可以做一个foreach,在那里我检查$key是否是一个字符串;然而,循环增加了代码的循环复杂性,所以我试图避免它们。

好吧,如果真的不想使用foreach,你可以这样做:

array_walk($data, function (&$v) {
    $keys = array_filter(array_keys($v), function($k) {return !is_int($k);});
    $v = array_intersect_key($v, array_flip($keys));
});

CCD_ 5仍然像CCD_ 6那样进行循环;只是没有明确显示。

此外,正如mario所说,修改数据库查询将是一个比这更可取的做法。如果必须在PHP端执行此操作,那么foreach的效率会高得多。

演示