如何通过php上的条件删除数组中的值?
我的第一个数组如下所示:如何通过php上的条件删除数组中的值?,php,arrays,key,Php,Arrays,Key,我的第一个数组如下所示: $photoList = array( array( 'id' => 1, 'name' => 'chelsea.jpg' ), array( 'id' => 2, 'name' => 'mu.jpg' ), array( 'id' => 3, 'name' => 'city.jpg' ) )
$photoList = array(
array(
'id' => 1,
'name' => 'chelsea.jpg'
),
array(
'id' => 2,
'name' => 'mu.jpg'
),
array(
'id' => 3,
'name' => 'city.jpg'
)
);
$photo = array('cover1'=>'chelsea.jpg', 'cover2'=>'arsenal.jpg');
$photo = array('cover1'=>'chelsea.jpg');
$photo = array('cover1'=>'madrid.jpg', 'cover2'=>'barcelona.jpg');
$photo = NULL
我的第二个数组如下所示:
$photoList = array(
array(
'id' => 1,
'name' => 'chelsea.jpg'
),
array(
'id' => 2,
'name' => 'mu.jpg'
),
array(
'id' => 3,
'name' => 'city.jpg'
)
);
$photo = array('cover1'=>'chelsea.jpg', 'cover2'=>'arsenal.jpg');
$photo = array('cover1'=>'chelsea.jpg');
$photo = array('cover1'=>'madrid.jpg', 'cover2'=>'barcelona.jpg');
$photo = NULL
如果第二个数组的值不在第一个数组中,它将从第二个数组中删除该值
根据上面的示例,由于arsenal.jpg
不在第一个数组中,因此它将被删除
因此,我希望$photo
中的新数组如下所示:
$photoList = array(
array(
'id' => 1,
'name' => 'chelsea.jpg'
),
array(
'id' => 2,
'name' => 'mu.jpg'
),
array(
'id' => 3,
'name' => 'city.jpg'
)
);
$photo = array('cover1'=>'chelsea.jpg', 'cover2'=>'arsenal.jpg');
$photo = array('cover1'=>'chelsea.jpg');
$photo = array('cover1'=>'madrid.jpg', 'cover2'=>'barcelona.jpg');
$photo = NULL
我再举一个例子。例如,我的$photo
数组如下:
$photoList = array(
array(
'id' => 1,
'name' => 'chelsea.jpg'
),
array(
'id' => 2,
'name' => 'mu.jpg'
),
array(
'id' => 3,
'name' => 'city.jpg'
)
);
$photo = array('cover1'=>'chelsea.jpg', 'cover2'=>'arsenal.jpg');
$photo = array('cover1'=>'chelsea.jpg');
$photo = array('cover1'=>'madrid.jpg', 'cover2'=>'barcelona.jpg');
$photo = NULL
然后,新阵列将如下所示:
$photoList = array(
array(
'id' => 1,
'name' => 'chelsea.jpg'
),
array(
'id' => 2,
'name' => 'mu.jpg'
),
array(
'id' => 3,
'name' => 'city.jpg'
)
);
$photo = array('cover1'=>'chelsea.jpg', 'cover2'=>'arsenal.jpg');
$photo = array('cover1'=>'chelsea.jpg');
$photo = array('cover1'=>'madrid.jpg', 'cover2'=>'barcelona.jpg');
$photo = NULL
因为它不在$photoList
数组中
如何操作?只需使用Php函数:
array\u intersect
和array\u column
:
$photo = array_intersect($photo, array_column($photoList, 'name')) ?: null;
只需使用Php函数:
array\u intersect
和array\u column
:
$photo = array_intersect($photo, array_column($photoList, 'name')) ?: null;
根据$photoList
,您可以使用减少数据:
$photo = array_filter($photo, function($item) use ($photoList) {
return in_array($item, array_column($photoList, 'name')) ;
});
if (empty($photo)) $photo=null; // to transform empty array to null.
var_dump($photo);
产出:
array(1) {
["cover1"]=>
string(11) "chelsea.jpg"
}
或者对于第二个示例,为NULL
请注意,您还可以从匿名函数中提取array\u列
,并将其与use()
一起传递:
编辑以重新索引关键点:
$idx = 1 ;
foreach ($photo as $k => $v) {
unset($photo[$k]);
$photo['cover'.$idx++]=$v;
}
根据$photoList
,您可以使用减少数据:
$photo = array_filter($photo, function($item) use ($photoList) {
return in_array($item, array_column($photoList, 'name')) ;
});
if (empty($photo)) $photo=null; // to transform empty array to null.
var_dump($photo);
产出:
array(1) {
["cover1"]=>
string(11) "chelsea.jpg"
}
或者对于第二个示例,为NULL
请注意,您还可以从匿名函数中提取array\u列
,并将其与use()
一起传递:
编辑以重新索引关键点:
$idx = 1 ;
foreach ($photo as $k => $v) {
unset($photo[$k]);
$photo['cover'.$idx++]=$v;
}
试试看
<?php
$photoList = array(
array(
'id' => 1,
'name' => 'chelsea.jpg'
),
array(
'id' => 2,
'name' => 'mu.jpg'
),
array(
'id' => 3,
'name' => 'city.jpg'
)
);
$photo = array('cover1'=>'chelsea.jpg', 'cover2'=>'arsenal.jpg');
foreach ($photo as $key => $value)// loop in $photo array
{
if(!in_array( $value ,array_column($photoList, 'name')))//check if $photoList array has $value in column 'name'
{
unset($photo[$key]);//unset element
}
}
print_r($photo);
?>
更新:由Progrock优化的代码
$photoListNames = array_column($photoList, 'name');
foreach($photo as $key => $value)
if(!in_array($value, $photoListNames))
unset($photo[$key]);
试试看
<?php
$photoList = array(
array(
'id' => 1,
'name' => 'chelsea.jpg'
),
array(
'id' => 2,
'name' => 'mu.jpg'
),
array(
'id' => 3,
'name' => 'city.jpg'
)
);
$photo = array('cover1'=>'chelsea.jpg', 'cover2'=>'arsenal.jpg');
foreach ($photo as $key => $value)// loop in $photo array
{
if(!in_array( $value ,array_column($photoList, 'name')))//check if $photoList array has $value in column 'name'
{
unset($photo[$key]);//unset element
}
}
print_r($photo);
?>
更新:由Progrock优化的代码
$photoListNames = array_column($photoList, 'name');
foreach($photo as $key => $value)
if(!in_array($value, $photoListNames))
unset($photo[$key]);
我想删除
$photo
数组的值。非$photoList
阵列。再次尝试查看我的问题已修复,很抱歉遗漏了它尝试我的代码它完全满足您的需要@成功我想删除$photo
数组的值。非$photoList
阵列。再次尝试查看我的问题已修复,很抱歉遗漏了它尝试我的代码它完全满足您的需要@Success Man您可以通过在foreach之外调用数组列来稍微优化此功能。通过在foreach外部调用array\u列,可以稍微优化这一点。我想问一下。我也可以更新钥匙吗。例如:$photoList
数组与我的问题相同。但是像这样的photo
数组:$photo=array('cover1'=>'liverpool.jpg','cover2'=>'city.jpg')代码>。从代码中,结果是:数组([cover2]=>city.jpg)
。我想要结果:数组([cover1]=>city.jpg)
。因此,如果没有cover1
key@SuccessMan否,不使用阵列过滤器
。我已经更新了答案来重新索引钥匙。我想问一下。我也可以更新钥匙吗。例如:$photoList
数组与我的问题相同。但是像这样的photo
数组:$photo=array('cover1'=>'liverpool.jpg','cover2'=>'city.jpg')代码>。从代码中,结果是:数组([cover2]=>city.jpg)
。我想要结果:数组([cover1]=>city.jpg)
。因此,如果没有cover1
key@SuccessMan否,不使用阵列过滤器
。我已经更新了答案以重新索引键。