Преобразовать массив индексов массива в значение в многомерном массиве динамического размера

у меня есть массив, как показано ниже:

test[
0 => 0,
1 => 2 ,
2 => 0,
3 => 2
]

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

test2[0][2][0][2]

Я старался :

$test3= array_flip ( $test )

работает нормально, но не удобно в отношении коллизий, так как у меня нет контроля над массивом, любая помощь?

1

Решение

function arrayToIndex($array,$index) {
$element = $array;
for ($i = 0; $i < count($index); $i++) {
$element = $element[$index[$i]];
}
return $element;
}
$test = [[[[1],[2]],[[3],[4]]],[[[5],[6]],[[7],[8]]]];
$index = [0,1,0,0];
echo arrayToIndex($test,$index);

Вот функция, которая реализует запрашиваемое вами поведение. $array массив для поиска, и $index это массив индексов. Я предлагаю вам поиграть с этим примером и посмотреть, как извлекается каждое значение.

Живой пример: http://ideone.com/fork/BzCjcK

1

Другие решения

так что после головы я придумал функцию ниже, которая служила моей цели:

$mainarray = [

0 => [
0 =>[
0 => [
0 => 'one' ,
1 => 'two' ,
2 => 'three' ,
3 => 'four'
],

1 => [
0 => 'one' ,
1 => 'two' ,
2 => 'three' ,
3 => 'four'
]]
]

]

Тогда этот массив ниже имеет значения в качестве индекса $mainarray выше того, что я хочу получить, скажем one как указано выше ,

$arraywithseacrhindex = [
0 => 0 ,
1 => 0 ,
2 => 0 ,
3 => 0 ,
]

Решение :

$array = $mainarray ;
$arr = $arraywithseacrhindex ;
$counter= count($arr)-1 ;
$result = array() ;
for($i=0; $i< $counter; $i++) {

if(empty( $result ) )
{
// first loop to put $result at per with $array
$result[$arr[$i]] = $array[$arr[$i]]  ;
}else{
// this is the trick of the solution
$cResult = current($result);
unset($result);
$result = array() ;
$result[$arr[$i]] = $cResult[$arr[$i]]  ;}

}

var_dump($result);

Надеюсь, это поможет кому-то в будущем.

0

По вопросам рекламы [email protected]