У меня есть такой массив:
return [
[ 'file_name' => basename( $path['path'] ) ],
[ 'file_path' => str_replace( basename( $path['path'] ), '', $path['path'] ) ]
];
Проблема в том, что я должен повторить тот basename( $path['path'] ), который не оптимизирован. Вот мои мысли:
Самый простой способ - я определенно мог бы присвоить это переменной, но, поскольку я вызываю basename[ $path['path'], он должен быть уже создан где-то в памяти, и у меня должен быть где-то указатель на него.
Самая большая проблема в том, что я вижу, что каждый элемент в массиве является отдельной частью в памяти и содержит уникальное значение, если бы мой второй элемент в этом массиве должен был имитировать значение брата из того же массива, позже он также обновился бы, когда брат, которого он изображает, также обновляет?
Итак, в идеале я бы искал:
return [
[ 'file_name' => define( ],
[ 'file_path' => str_replace( basename( $path['path'] ), '', $path['path'] ) ]
];
Моя проблема в том, что я собираюсь создать такой большой массив, и я не чувствую, что назначаю эти значения переменной, чтобы я мог использовать их в двух местах.
Чем там можно заняться?






Если я понимаю ваши требования, вы можете просто использовать один вызов pathinfo().
$path_parts = pathinfo('/www/htdocs/inc/lib.inc.php');
return [
[ 'file_name' => $path_parts['basename'] ], // lib.inc.php
[ 'file_path' => $path_parts['dirname'] ] // /www/htdocs/inc
];
http://php.net/manual/en/function.pathinfo.php
Или, если вы хотите пойти «по-настоящему просто», просто взорвите последний / и сохраните эти данные.
О, нет, как бы это сказать ... мой вопрос просто о том, почему я не могу просто сослаться в новом значении того же массива на прошлое значение того же массива.
хранилище в массиве - это статические данные.
Естественно, но это мой вопрос по сути - можно ли каким-то образом создать повторно используемые данные, чтобы не происходило повторения / повторного выполнения?
Что ж, если бы это было моей задачей, я бы избежал раздувания и просто сохранил полное имя файла и путь как целую строку. Затем, когда у меня есть программа, которая хочет использовать подстроку строки, ей нужно только вызвать правильную функцию. Это экономит память и снижает общую сложность массива.
@coolpasta Независимо от того, что вы решите сделать, пожалуйста, увеличьте разрешение этой страницы до признанного системой разрешения. Если вы хотите получить уточнение / уточнение ответа, просите об этом.
return [
[ 'file_name' => $expensive = expensive( $path['path'] ) ],
[ 'file_path' => str_replace( $expensive, '', $path['path'] ) ]
];
Я бы не стал уклоняться от редко используемых переменных.
Какого ... почему я никогда не думал об этом?
Первый комментарий к этому. (Ник.)
@Nick Ага, видел, извините.
Почему бы не использовать
dirname? или что-то вроде$x = ['a' => $b = 4, 'b' => $b + 2 ];работает ...