从数组 php 中删除键和值



需要删除存储在数据库中的数组,但似乎这不能很好地工作

$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]总是从数据库中支持我的第一个值,我需要从存储在数据库中array中删除$content_id,然后我将再次序列化内容并更新行。

阵列外观

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

在你的代码中,你没有遍历数组(你这样做了,但你没有在循环中做任何事情(,因为你在该行的末尾有一个;,并且没有{}封装循环。更改它将适用于您的原始比较。

<?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)
}
}

试试这个

$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。 但是由于;分号,它会运行循环,然后在循环完成后运行回显。

最新更新