Почему недавно присвоенное вручную значение массива в массиве не может наследовать значения от своих братьев?

У меня есть такой массив:

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'] ) ]
];

Моя проблема в том, что я собираюсь создать такой большой массив, и я не чувствую, что назначаю эти значения переменной, чтобы я мог использовать их в двух местах.

Чем там можно заняться?

Почему бы не использовать dirname? или что-то вроде $x = ['a' => $b = 4, 'b' => $b + 2 ]; работает ...

Nick 04.11.2018 23:44
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
1
27
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Если я понимаю ваши требования, вы можете просто использовать один вызов 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 05.11.2018 00:03

хранилище в массиве - это статические данные.

mickmackusa 05.11.2018 00:04

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

coolpasta 05.11.2018 00:05

Что ж, если бы это было моей задачей, я бы избежал раздувания и просто сохранил полное имя файла и путь как целую строку. Затем, когда у меня есть программа, которая хочет использовать подстроку строки, ей нужно только вызвать правильную функцию. Это экономит память и снижает общую сложность массива.

mickmackusa 05.11.2018 00:07

@coolpasta Независимо от того, что вы решите сделать, пожалуйста, увеличьте разрешение этой страницы до признанного системой разрешения. Если вы хотите получить уточнение / уточнение ответа, просите об этом.

mickmackusa 05.11.2018 22:42
Ответ принят как подходящий
return [
    [ 'file_name' => $expensive = expensive( $path['path'] ) ],
    [ 'file_path' => str_replace( $expensive, '', $path['path'] ) ]
];

Я бы не стал уклоняться от редко используемых переменных.

Какого ... почему я никогда не думал об этом?

coolpasta 05.11.2018 00:08

Первый комментарий к этому. (Ник.)

Progrock 05.11.2018 00:09

@Nick Ага, видел, извините.

coolpasta 05.11.2018 00:21

Другие вопросы по теме