我有一个变量,它包含以下嵌套数组:
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);
}
}
但是上面的代码输出不是我想要的。
您可以使用稍微不同的循环。
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; });
但它很可能效率较低,因为它必须检查阵列的每个元素。
我想知道有多少上下文可以帮助我们回答您的问题。。。以下是您所问问题的答案:
$newArray = array($var[2]);
您可以创建一个新数组:
$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]];
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;
}, []);