У меня есть массив $ arr = ['a', ['b', ['c', 'd', 'e']]]; .
so $ arr [1] [1] [0] is 'c' .
Я имею эти индексы, указанные в n. arr, $ arx = [1,1 . />
(это может звучать сложно, но происходит от того факта, что я получил их от анализа своего рода псевдоазыка сценариев).function &getDeepRef(&$array, $indexes){...}< /code> < /p>
Использование:
$ref = & getDeepRef($arr, $idx);< /code> < /p>
На данный момент все работает так же, как и ожидалось:
echo $ref;< /code> ===> выходы 'c' < /code>
$ref = 12;< /code>
print_r($arr); ==> $ arr теперь ['a', ['b', [12, 'd', 'e']]]
Вот мой вопрос:
мне нужен $ arr [1] [1] [0] , чтобы стать ссылкой на другой варень Это использование ссылки $ ref < /code>?$ref = &$OtherVar; insets $ ref как ссылка на $ arr [1] [1] [0] , и делает это ссылкой на $ othervar , но никоим образом не помогает сделать $ arr [1] [1] [0] ссылка на $ othervar ). Array , станьте ссылкой на данную переменную ? $arr = ['a', ['b', 'ii'=> ['c','d','e']],'f'];
out($arr);
$idxLeft = [2];
$idxRight = [1,'ii',0];
//Target: $arr[2] = &$arr[1]['ii'][0];
//Following does NOT work:
$leftRef = &getDeepRef($arr,$idxLeft);
$rightRef = &getDeepRef($arr,$idxRight);
$leftRef = &$rightRef; //this did NOT make $arr[2] a reference to $arr[1]['ii'][0]
//instead it broke the reference from $leftRef on $arr[2] and made a new reference from $leftRef onto $arr[1]['ii'][0].
//Following DOES work, but I'd prefer avoiding eval();
$eval = '$arr['. implode('][',array_map('json_encode',$idxLeft)) . '] = &$arr['. implode('][',array_map('json_encode',$idxRight)) . '];';
out($eval);
eval($eval);
out($arr);
$a = &getDeepRef($arr,$idxLeft);
$a=45;
out($arr);
function &getDeepRef(&$var,$indexes){//third param just for exception message
if(null===($id=array_shift($indexes))){ return $var; }
if(!is_array($var) || !array_key_exists($id, $var)){ throw new \Exception("Bad key: [$id]"); }
return getDeepRef($var[$id],$indexes);
}
function out($v){
static $i=0;
echo '
'.++$i.' - '; print_r($v);
}
Подробнее здесь: https://stackoverflow.com/questions/797 ... rence-to-b
Используйте ссылку на $ a, чтобы сделать $ a ссылки на $ b ⇐ Php
Кемеровские программисты php общаются здесь
-
Anonymous
1757085481
Anonymous
У меня есть массив $ arr = ['a', ['b', ['c', 'd', 'e']]]; .
so $ arr [1] [1] [0] is 'c' .
Я имею эти индексы, указанные в n. arr, $ arx = [1,1 . />
(это может звучать сложно, но происходит от того факта, что я получил их от анализа своего рода псевдоазыка сценариев).function &getDeepRef(&$array, $indexes){...}< /code> < /p>
Использование:
$ref = & getDeepRef($arr, $idx);< /code> < /p>
На данный момент все работает так же, как и ожидалось:
echo $ref;< /code> ===> выходы 'c' < /code>
$ref = 12;< /code>
print_r($arr); ==> $ arr теперь ['a', ['b', [12, 'd', 'e']]]
[b] Вот мой вопрос: [/b]
мне нужен $ arr [1] [1] [0] , чтобы стать ссылкой на другой варень Это использование ссылки $ ref < /code>?$ref = &$OtherVar; insets $ ref как ссылка на $ arr [1] [1] [0] , и делает это ссылкой на $ othervar , но никоим образом не помогает сделать $ arr [1] [1] [0] ссылка на $ othervar ). Array , станьте ссылкой [b] на данную переменную [/b]? $arr = ['a', ['b', 'ii'=> ['c','d','e']],'f'];
out($arr);
$idxLeft = [2];
$idxRight = [1,'ii',0];
//Target: $arr[2] = &$arr[1]['ii'][0];
//Following does NOT work:
$leftRef = &getDeepRef($arr,$idxLeft);
$rightRef = &getDeepRef($arr,$idxRight);
$leftRef = &$rightRef; //this did NOT make $arr[2] a reference to $arr[1]['ii'][0]
//instead it broke the reference from $leftRef on $arr[2] and made a new reference from $leftRef onto $arr[1]['ii'][0].
//Following DOES work, but I'd prefer avoiding eval();
$eval = '$arr['. implode('][',array_map('json_encode',$idxLeft)) . '] = &$arr['. implode('][',array_map('json_encode',$idxRight)) . '];';
out($eval);
eval($eval);
out($arr);
$a = &getDeepRef($arr,$idxLeft);
$a=45;
out($arr);
function &getDeepRef(&$var,$indexes){//third param just for exception message
if(null===($id=array_shift($indexes))){ return $var; }
if(!is_array($var) || !array_key_exists($id, $var)){ throw new \Exception("Bad key: [$id]"); }
return getDeepRef($var[$id],$indexes);
}
function out($v){
static $i=0;
echo '
'.++$i.' - '; print_r($v);
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79756906/use-a-reference-to-a-to-make-a-a-reference-to-b[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия