Используйте ссылку на $ a, чтобы сделать $ a ссылки на $ bPhp

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Используйте ссылку на $ a, чтобы сделать $ a ссылки на $ b

Сообщение 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']]]
Вот мой вопрос:

мне нужен $ 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];

$ref = &getDeepRef($arr,$idxRight);//$ref now is a reference to $arr[1]['ii'][0]
$ref = 'ccc';//demo: $arr[1]['ii'][0] is now 'ccc'
out($arr);

//Now the 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(); [notice: the mapping with json_encode is just here for string indexes compatibility, like 'ii']
$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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»