Назначенная переменная и возвращающая значение после присвоения - PullRequest
1 голос
/ 08 апреля 2020

У меня есть следующее

$basename = !empty($_POST['basename']) ? $_POST['basename'] : null;

$upload_files = array(
    '/usr/path/to/dir/' . $basename,
    '/usr/path/to/dir/thumbs/' . $basename

Позже я переназначил переменную $basename, вот так

$basename = 'test.jpg';

Когда echo вот так

echo $upload_files[0];

Я хочу вывести это

'/usr/path/to/dir/test.jpg'

Но, очевидно, это не так.

Есть ли уловка с php, где это возможно, например, добавление & перед переменная или что-то?

Ответы [ 2 ]

2 голосов
/ 08 апреля 2020

Как только вы включите $basename в строку, PHP потеряет всю ее дорожку как переменную, поэтому последующие изменения не будут иметь никакого эффекта. Вы можете преобразовать значения в $upload_files в массивы, при необходимости вставляя их в строки, и сделать второй элемент ссылкой на $basename:

$basename = 'file1.gif';
$upload_files = array(
    array('/usr/path/to/dir/', &$basename),
    array('/usr/path/to/dir/thumbs/', &$basename)
);

echo implode('', $upload_files[0]) . PHP_EOL;

$basename = 'test.jpg';
echo implode('', $upload_files[0]). PHP_EOL;

Вывод:

/usr/path/to/dir/file1.gif
/usr/path/to/dir/test.jpg

Демонстрация на 3v4l.org

1 голос
/ 08 апреля 2020

Каков ваш предполагаемый вариант использования? Если вам нужен доступ к каждой строке pi c, вы можете сохранить их в массиве и просто использовать последнюю запись для «текущего» элемента. Тогда у вас будет доступ к поиску или обработке каждого, если вам это нужно. Вы можете согласиться по мере необходимости. Вероятно, я бы написал функцию для ее обработки.

$basenames = [];
// However you're retrieving the filename
array_push($basenames, "file.gif");

// Current file
concatPic(count($basenames)-1); 

// To find what key you wants position
$fileIndex = array_search("what_you're_looking_for", $basenames); 

concatPic($fileIndex); // To process a specific index

function concatPic($indexValue) 
{ 
    return / echo (whatever) "usr/path/..." . $basenames[$indexValue] 
};

Вы также можете написать foreach, чтобы сделать все из них одновременно, или даже объединить их перед передачей в массив, если хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...