如何从 php 上的密钥开始更新密钥



我的第一个数组是这样的:

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

如果我运行:echo '<pre>';print_r($photo);echo '</pre>';,结果是这样的:

Array
(
    [cover2] => city.jpg
)

我想要这样的结果:

Array
(
    [cover1] => city.jpg
)
因此,如果没有封面1

,则封面2更改为封面1

我该怎么做?

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

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

输出:

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;

它将使用所需的命名样式重写您的数组。

最新更新