Php 如何删除数组中除特定项以外的所有项?

Php 如何删除数组中除特定项以外的所有项?,php,arrays,if-statement,for-loop,Php,Arrays,If Statement,For Loop,我有一个包含这些嵌套数组的变量: echo $var; /* Output: Array( [0] => Array ( [id] => 1 [box] => 0 ) [2] => Array ( [id] => 2 [box] => 0 )

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

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\u shift()
函数来完成其中的一部分:

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

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

您可以创建一个新数组:

$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]];

我想知道上下文对我们回答你的问题有多大帮助。。。以下是对你所问问题的回答:

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

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

foreach ($var as $item) {
    if ($item['id'] == 2) {
        $newvar = $item;
        break;
    }
}
您也可以使用数组过滤器

$id = 2;
$newvar = array_filter($var, function($x) use ($id) { return $x['id'] == $id; });
但它很可能效率较低,因为它必须检查数组的每个元素。

也可以完成这项工作:

$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;
}, []);

为什么不创建一个新阵列呢<代码>$cleansed=$arr[$id\u您想要的];未结算($arr)?只复制一个要保留的元素比重复删除不需要的内容效率更高。@MarcB emm,不错。。。谢谢
2
数组键或
id
的值在其中吗?@MarcB只是有个问题,有时候数组不包含我想要的键。。。另外,
2
不是数组的索引,它是
id
@RobbieAverill的值
id
看,我更新了我的问题,实际上
2
不是数组的索引,它是
id
的值。在这种情况下,看起来
$key
是数组的索引-您可以使用它来代替我的答案中的
$index
变量。(例如,
$newvar=array($var[$key]);
)只是一个小注释,有时该数字在数组中不存在,我希望它返回
null
。在这种情况下,是否可能?如果找不到该项,将永远不会设置
$newvar
。您可以在循环之前将其初始化为
null
。在过滤器示例中,您最好将
2
作为变量传入,因为我认为它不是一个幻数,即
array\u过滤器($var,function($x)use($id){return$x['id']=$id;})@RobbieAverill同意。此外,如果我们要使用一个幻数,它可能应该是三,而不是两。@stack,如果您需要这样设置
$var
,您可以在循环之后设置它:
$var=isset($newvar)$newvar:null简单但有效