从数组php中删除键和值

从数组php中删除键和值,php,arrays,Php,Arrays,需要删除存储在数据库中的数组,但似乎效果不太好 $content_id = array('p','103'); $content = unserialize($row['content_id']); if (in_array($content_id, $content)) { foreach($content as $key => $value); if ($value == $content_id) unset($content[$key]); $insert_n

需要删除存储在数据库中的数组,但似乎效果不太好

$content_id = array('p','103');
$content = unserialize($row['content_id']);
if (in_array($content_id, $content)) {
    foreach($content as $key => $value);
    if ($value == $content_id) unset($content[$key]);
    $insert_new = serialize($content); 
    print_r($insert_new);
}
$content[$key]
始终是数据库中的第一个返回值,我需要从数据库中存储的
数组中删除
$content\u id
,然后再次序列化内容并更新行

阵列外观

Array
(
    [0] => v
    [1] => 103
)

Array
(
    [0] => p
    [1] => 103
)
Array
(
    [0] => v
    [1] => 200
)

Array
(
    [0] => p
    [1] => 600
)
试试这个

 $new_array = []
 foreach($content as $key => $value){
    if ($value != $content_id){
       $new_array[] = $value
    }
 }

$insert_new = serialize($new_array ); 
print_r($insert_new);
这是假设您发布的数组实际上是:

Array(
    [0] => Array
    (
        [0] => v
        [1] => 103
    ),
    [1] => Array
    (
        [0] => p
        [1] => 103
    ),
    [2] => Array
    (
        [0] => v
        [1] => 200
    ),
    [3] => Array
    (
        [0] => p
        [1] => 600
    )
)
因为您发布的是
4
数组,这可能是上面在数组中的样子。因为
,它甚至不起作用你在它后面。您可以这样测试:

$a=[1,2,3,4];

foreach($a AS $b);
echo $b;
输出:

4

您会看到得到4,因为这是数组中的最后一个值,所以预期的输出将是
1234
。但正因为如此,
分号它运行循环,然后当循环完成时,它运行回显。

在代码中,您没有在数组上循环(是的,但是您没有在循环中执行任何操作),因为您有一个
在该行的末尾,没有封装循环的
{}
。更改将与原始比较一起使用

<?php
$content = [
    ["v",103],
    ["p",103],
    ["v", 200]
    ];

$content_id = array('p','103');
#$content = unserialize($row['content_id']);

if (in_array($content_id, $content)) {
    foreach($content as $key => $value) {
       if($content_id==$value) {
         unset($content[$key]);
       }
    }
        echo "<pre>";
        var_dump($content);
        echo "</pre>";
    #$insert_new = serialize($content); 
    #print_r($insert_new);
}

// Output:
array(2) {
  [0]=>
  array(2) {
    [0]=>
    string(1) "v"
    [1]=>
    int(103)
  }
  [2]=>
  array(2) {
    [0]=>
    string(1) "v"
    [1]=>
    int(200)
  }
}

您需要从数组或基础数据库中删除值吗?只需使用array_diff?需要删除存储在数据库中的数组-通常数组不存储在数据库中。但是否要将其从数据或实际数据库中删除。不清楚。更不用说这是4个独立的阵列,而不是一个。可能这些是嵌套的
[[[0]=>v[1]=>103]]
我们甚至不讨论在foreach循环过程中删除东西,这是一种非启动程序,因为foreach有时会在副本上复制数组和循环
@Jeff-这在他的代码中很好,因为
$insert\u new=serialize($content)应仅在循环之后的完整数组上发生。像
如果你可以做一行或一行
不带括号。最终,他们将需要更多。或者至少它读起来比这更好。这就是我需要的。谢谢@Jeff