我的第一个数组如下:
$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
数组内
我该怎么做?
您可以使用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;
}
只需使用Php函数:array_intersect
和array_column
:
$photo = array_intersect($photo, array_column($photoList, 'name')) ?: null;
尝试
<?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]);