如何通过php上的条件删除数组中的值?

问题描述 投票:1回答:3

我的第一个数组如下:

$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');

如果第二个数组的值不在第一个数组内,它将从第二个数组中删除该值

基于上面的例子,因为arsenal.jpg不在第一个数组中,所以它将被删除

所以我希望$photo的新数组是这样的:

$photo = array('cover1'=>'chelsea.jpg');

我举另一个例子。例如我的$photo数组如下:

$photo = array('cover1'=>'madrid.jpg', 'cover2'=>'barcelona.jpg');

然后新数组如下:

$photo = NULL

因为它不在$photoList数组内

我该怎么做?

php arrays key
3个回答
3
投票

您可以使用array_filter()来减少数据,基于array_column()$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_column,并使用use()传递它:

$col = array_column($photoList, 'name') ;
$photo = array_filter($photo, function($item) use ($col) {
   return in_array($item, $col) ;
});

编辑以重新索引键:

$idx = 1 ;
foreach ($photo as $k => $v) {
    unset($photo[$k]);
    $photo['cover'.$idx++]=$v;
}

2
投票

只需使用Php函数:array_intersectarray_column

$photo = array_intersect($photo, array_column($photoList, 'name')) ?: null;

0
投票

尝试

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

输出:

Array ( [cover1] => chelsea.jpg )

更新:由Progrock优化的代码

$photoListNames = array_column($photoList, 'name');
foreach($photo as $key => $value)
    if(!in_array($value, $photoListNames))
        unset($photo[$key]);
© www.soinside.com 2019 - 2024. All rights reserved.