如何删除除特定数组之外的所有数组项?

时间:2016-04-19 21:23:53

标签: php arrays if-statement for-loop

我有一个包含这些嵌套数组的变量:

echo $var;

/* Output:
Array(
       [0] => Array
         (
             [id] => 1
             [box] => 0
         )

       [2] => Array
         (
             [id] => 2
             [box] => 0
         )

       [3] => Array
         (
             [id] => 3
             [box] => 1
         )
) */

现在我要删除除$numb = 2; (id的值)之外的所有数组项目。我的意思是我想要这个输出:

echo newvar;

/* Output:
Array(
       [2] => Array
         (
             [id] => 2
             [box] => 0
         )
) */

我该怎么做?

实际上我可以使用if语句和array_shift()函数来完成其中的一部分:

foreach($var as $key => $val) {
    if($val["id"] != 2) {
        array_shift($var);
    }
}

但上面代码的输出并不是我想要的。

4 个答案:

答案 0 :(得分:3)

您可以使用稍微不同的循环。

foreach ($var as $item) {
    if ($item['id'] == 2) {
        $newvar = $item;
        break;
    }
}

您也可以使用array_filter

$id = 2;
$newvar = array_filter($var, function($x) use ($id) { return $x['id'] == $id; });

但它很可能效率较低,因为它必须检查数组的每个元素。

答案 1 :(得分:1)

你可以制作一个新阵列:

$oldArray = array(0 => 'a', 1 => 'b', 2 => 'c', 3=> 'd');

$index = 2;
$newArray = array($index => $oldArray[$index]);

// or even
$newArray = [$index => $oldArray[$index]];

如果您不需要保留索引,您可以这样做:

$newArray = [$oldArray[$index]];

答案 2 :(得分:1)

array_reduce()也可以胜任:

$array = [
    ['id' => 1, 'box' => 0],
    ['id' => 2, 'box' => 0],
    ['id' => 3, 'box' => 1]
];
$id = 2;
$result = array_reduce ($array, function ($carry, $item) use ($id) {
    if ( $item['id'] === $id )
        $carry[$item['id']] = $item;
    return $carry;
}, []);

答案 3 :(得分:0)

我想知道有多少背景会帮助我们回答你的问题......以下是你问的答案:

$newArray = array($var[2]);