画像ファイル名を、指定順に従って新しい番号に変更したい

「元画像ファイル名(の拡張子部分)」を、「指定されたリネーム順」に従って「リネーム後画像名」のように実際に変換したいのですが、どうすれば良いでしょうか?

元画像

Array
(
 [0] => a_1.jpg … 画像一
 [1] => a_2.jpg … 画像二
 [2] => a_3.jpg … 画像三
 [3] => a_4.png … 画像四
 [4] => a_5.gif … 画像五
)

リネーム順(5 番目の画像を 3 番目へ移動。後順位は、それに伴い一つずつ下がる)

Array
(
 [0] => 1
 [1] => 2
 [2] => 5
 [3] => 3
 [4] => 4
)

リネーム後画像名

Array
(
 [0] => a_1.jpg … 元画像一
 [1] => a_2.jpg … 元画像二
 [2] => a_3.gif … 元画像五
 [3] => a_4.jpg … 元画像三
 [4] => a_5.png … 元画像四
)

ソフトウェア開発 カテゴリーPHP カテゴリー   閲覧数:459  投稿者:しのはら花梨さん

PHPで画像ファイル名を指定順に変更するには、元画像ファイル名の拡張子を取得し、指定リネーム順から現在の順位を取得し、現在の順位に応じて拡張子を変更し、元画像ファイル名と拡張子を結合して新しいファイル名を作成します

PHPで画像ファイル名を指定順に変更するには、以下の手順で行います。

1.元画像ファイル名の拡張子を取得します。
2.指定されたリネーム順から、現在の順位を取得します。
3.現在の順位に応じて、拡張子を変更します。
4.元画像ファイル名と拡張子を結合して、新しいファイル名を作成します。

具体的には、以下のコードで実現できます。

<?php
 
// 元画像ファイル名
$originImgAry = [
    'a_1.jpg',
    'a_2.jpg',
    'a_3.jpg',
    'a_4.png',
    'a_5.gif',
];

// リネーム順
$renameOrderAry = [1, 2, 5, 3, 4];

// 拡張子を取得
$extensions = array_map(function ($filename) {
    return pathinfo($filename, PATHINFO_EXTENSION);
}, $originImgAry);

// 現在の順位を取得
$currentOrderAry = array_map(function ($renameOrderAry, $index) {
    return array_search($index, $renameOrderAry) + 1;
}, $renameOrderAry, range(0, count($originImgAry)));

// 拡張子を変更
$new_filenames = array_map(function ($extension, $current_order) {
    return sprintf('a_%02d.%s', $current_order, $extension);
}, $extensions, $currentOrderAry);

// 新しいファイル名を表示
print_r($new_filenames);

このコードを実行すると、以下の出力になります。

Array
(
    [0] => a_1.jpg
    [1] => a_2.jpg
    [2] => a_3.gif
    [3] => a_4.jpg
    [4] => a_5.png
)

解説

1.元画像ファイル名の拡張子を取得するには、pathinfo()関数を使用します。

$extensions = array_map(function ($filename) {
    return pathinfo($filename, PATHINFO_EXTENSION);
}, $originImgAry);

2.指定されたリネーム順から、現在の順位を取得するには、array_search()関数を使用します。

$currentOrderAry = array_map(function ($renameOrderAry, $index) {
    return array_search($index, $renameOrderAry) + 1;
}, $renameOrderAry, range(0, count($originImgAry)));

3.現在の順位に応じて、拡張子を変更するには、sprintf()関数を使用します。

$new_filenames = array_map(function ($extension, $current_order) {
    return sprintf('a_%02d.%s', $current_order, $extension);
}, $extensions, $currentOrderAry);

4.元画像ファイル名と拡張子を結合して、新しいファイル名を作成するには、sprintf()関数を使用します。

$new_filenames = array_map(function ($extension, $current_order) {
    return sprintf('a_%02d.%s', $current_order, $extension);
}, $extensions, $currentOrderAry);

なお、元画像ファイル名を変更するには、rename()関数を使用します。

// 画像ファイル名を変更
foreach ($new_filenames as $index => $filename) {
    rename($originImgAry[$index], $filename);
}

このコードを追加すると、元画像ファイル名も指定順に変更されます。

この回答へのレス

指定されたリネーム順に従って元画像ファイル名を変更し、rename関数で新しいファイル名を生成します

指定順に従って元画像ファイル名を変更し、リネーム後の画像名に従う方法を提供します。
この方法では、■リネーム後画像名配列を使わずに、指定されたリネーム順を元にファイル名を変更します。

<?php
// 元画像ファイル名
$originImgAry = array(
    'a_1.jpg', // 画像一
    'a_2.jpg', // 画像二
    'a_3.jpg', // 画像三
    'a_4.png', // 画像四
    'a_5.gif'  // 画像五
);

// リネーム順
$renameOrderAry= array(1, 2, 5, 3, 4);

// リネームの実行
foreach ($renameOrderAry as $key => $val) {
    $originFileName = $originImgAry[$key];
    $extension = pathinfo($originFileName, PATHINFO_EXTENSION);

    // リネーム後のファイル名を生成
    $newFileName = 'a_' . $val . '.' . $extension;

    // ファイル名を変更
    rename($originFileName, $newFileName);
}

echo "画像名が変更されました。";
?>

このスクリプトは、指定されたリネーム順に従って元画像ファイル名を変更し、新しいファイル名を生成しています。
元の拡張子は保持され、新しいファイル名は「a_新しいインデックス.拡張子」となります。
rename 関数を使用してファイル名を変更します。
コードを実行すると、指定された順に画像ファイル名が変更されます。

この回答へのレス

全ファイル名を「新No.旧No.拡張子」へ一旦変更後、次に旧Noの部分を削除して「新No.拡張子」へファイル名変更します

1.全ァイル名を「新No.旧No.拡張子」へ一旦変更します。
2.次に旧Noの部分を削除して「新No.拡張子」へファイル名変更します。

$originImgAry = array('a_1.jpg' ,'a_2.jpg' ,'a_3.jpg' ,'a_4.png' ,'a_5.gif');
$renameOrderAry = array(1,2,5,3,4);

//新Noを冠した画像名の配列
$tmpImgAry=array();
//1.すべてのファイル名にプレフィックスとして新Noを付与して 一旦「新No.旧No.拡張子」へ変更します
foreach($renameOrderAry as $key=>$val){
  $oldImgName = $originImgAry[$val-1];
  $tmpImgName = "a_".($key+1).".$oldImgName";
  rename($oldImgName,$tmpImgName); //rename(a_1.jpg,a_1.a_1.jpg); rename(a_2.jpg,a_2.a_2.jpg);  rename(a_5.gif,a_3.a_5.gif);
  $tmpImgAry[] = $tmpImgName;
}
var_export($tmpImgAry);
//array (
//  0 => 'a_1.a_1.jpg',
//  1 => 'a_2.a_2.jpg',
//  2 => 'a_3.a_5.gif',
//  3 => 'a_4.a_3.jpg',
//  4 => 'a_5.a_4.png',
)

//2.ファイル名真ん中の 旧No の部分を削除して「新No.拡張子」へ変更します
foreach($tmpImgAry as $val){
  list($newFileName,$oldFileName,$ext) = explode('.',$val);
  rename($val,"$newFileName.$ext");
}

この回答へのレス

ゲスト 1行コメント投稿

指定期間人気ページランキング / 2022-11-16 → 2025-12-11
順位 ページタイトル抜粋 アクセス数
1 QA2028 553
2 part と section と chapter の違いは何ですか? | 言葉 カテゴリー 346
3 仲介元付(専任) / 仲介元付(一般) / 仲介元付 の違いは、何ですか? | 不動産 カテゴリー 123
4 トピック の対義語は何ですか? | 言葉 カテゴリー 111
5 サービス紹介 108
6 「section」「division」「unit」「component」「module」の違いは何ですか? | 言葉 カテゴリー 84
7 カテゴリー一覧 77
8 Windowsパソコンを再起動すべき適切なタイミングについて | パソコン カテゴリー 70
9 タグ一覧 65
10 reply と comment と response の違いは何ですか? | 言葉 カテゴリー 64
11 userコメント一覧 59
12 ゲストコメント一覧 58
13 「topic」「part」「section」「chapter」を大きい順に並べてください。 | 言葉 カテゴリー 56
14 「topic」「part」「section」「chapter」「segment」「paragraph」を大きい順に並べてください。 | 言葉 カテゴリー 55
15 「四つの坂が合流している場所」を何と呼びますか? 交差点? それとも四差路ですか? | 言葉 カテゴリー 54
16 PHPでRSSフィードを効率的に表示するキャッシュ活用と更新判定について | PHP(ソフトウェア開発) カテゴリー 45
17 ルーターの電源を入れ直さなくても、IPアドレスは変更されますか? | ネットワーク(ソフトウェア開発) カテゴリー 42
18 Webページにおける topic と article の違いは何ですか? | Webサービス開発(ソフトウェア開発) カテゴリー 36
19 Webページにおける「section」「division」「unit」「component」「module」の違いは何ですか? | Webサービス開発(ソフトウェア開発) カテゴリー 35
20 Segment と Paragraph の違いは何ですか? | 言葉 カテゴリー 33
2025/12/12 1:02 更新