如何在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'=>'liverpool.jpg', 'cover2'=>'city.jpg');
$photo = array_filter($photo, function($item) use ($photoList) {
   return in_array($item, array_column($photoList, 'name')) ;
});
if (empty($photo)) 
    $photo=null;
Array
(
    [cover1] => city.jpg
)
$label = 'cover';
$index = 1;
$a_keys = array_keys($photo);
$new_photo = [];
foreach($a_keys AS $k=>$v){
    $new_photo[$label.$index] = $photo[$k];
    $index++;
}
$photo = $new_photo;
Array
(
    [cover1] => 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'=>'liverpool.jpg', 'cover2'=>'city.jpg');
$photo = array_filter($photo, function($item) use ($photoList) {
   return in_array($item, array_column($photoList, 'name')) ;
});
if (empty($photo)) 
    $photo=null;
Array
(
    [cover1] => city.jpg
)
$label = 'cover';
$index = 1;
$a_keys = array_keys($photo);
$new_photo = [];
foreach($a_keys AS $k=>$v){
    $new_photo[$label.$index] = $photo[$k];
    $index++;
}
$photo = $new_photo;
Array
(
    [cover1] => 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'=>'liverpool.jpg', 'cover2'=>'city.jpg');
$photo = array_filter($photo, function($item) use ($photoList) {
   return in_array($item, array_column($photoList, 'name')) ;
});
if (empty($photo)) 
    $photo=null;
Array
(
    [cover1] => city.jpg
)
$label = 'cover';
$index = 1;
$a_keys = array_keys($photo);
$new_photo = [];
foreach($a_keys AS $k=>$v){
    $new_photo[$label.$index] = $photo[$k];
    $index++;
}
$photo = $new_photo;
Array
(
    [cover1] => city.jpg
)
如果我运行:
echo'
Array
(
    [cover2] => 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'=>'liverpool.jpg', 'cover2'=>'city.jpg');
$photo = array_filter($photo, function($item) use ($photoList) {
   return in_array($item, array_column($photoList, 'name')) ;
});
if (empty($photo)) 
    $photo=null;
Array
(
    [cover1] => city.jpg
)
$label = 'cover';
$index = 1;
$a_keys = array_keys($photo);
$new_photo = [];
foreach($a_keys AS $k=>$v){
    $new_photo[$label.$index] = $photo[$k];
    $index++;
}
$photo = $new_photo;
Array
(
    [cover1] => city.jpg
)
因此,如果没有cover1,cover2将更改为cover1


我怎么做呢?

我不知道你真正需要什么。假设您希望递归地执行此操作,我希望这有助于:

$photoList = array(
    array(
        'id' => 1,
        'name' => 'chelsea.jpg'
    ),
    array(
        'id' => 2,
        'name' => 'mu.jpg'
    ),
    array(
        'id' => 3,
        'name' => 'city.jpg'
    )
);
$photo = array('cover1'=>'liverpool.jpg', 'cover2'=>'city.jpg');

$photo = array_filter($photo, function($item) use ($photoList) {
   return in_array($item, array_column($photoList, 'name')) ;
});
if (empty($photo)){
    $photo = null;
} else {
    $idx = 1 ;
    foreach ($photo as $key => $value) {
        unset($photo[$key]);
        $photo['cover'.$idx++] = $value;
    }
}
print_r($photo);

它将用想要的命名样式重写您的数组。

您可以像这样重新索引键:

$photoList = array(
    array(
        'id' => 1,
        'name' => 'chelsea.jpg'
    ),
    array(
        'id' => 2,
        'name' => 'mu.jpg'
    ),
    array(
        'id' => 3,
        'name' => 'city.jpg'
    )
);
photo = array('cover1'=>'liverpool.jpg', 'cover2'=>'city.jpg');
$photo = array_filter($photo, function($item) use ($photoList) {
   return in_array($item, array_column($photoList, 'name')) ;
});
if (empty($photo)) 
    $photo=null;
Array
(
    [cover1] => city.jpg
)
$label = 'cover';
$index = 1;
$a_keys = array_keys($photo);
$new_photo = [];
foreach($a_keys AS $k=>$v){
    $new_photo[$label.$index] = $photo[$k];
    $index++;
}
$photo = $new_photo;
Array
(
    [cover1] => city.jpg
)
产出:


你试过了吗?我试过了。但是,
$photo
数组的结果是一样的:
数组([cover1]=>liverpool.jpg[cover2]=>city.jpg)
。结果应该是:
数组([cover1]=>city.jpg)
@SuccessMan Yes。我已经用完整的代码更新了答案。