Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/230.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何通过php上的条件删除数组中的值?_Php_Arrays_Key - Fatal编程技术网

如何通过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否,不使用
阵列过滤器
。我已经更新了答案以重新索引键。