Nome do índice da matriz dinâmica do PHP

Eu quero passar uma function o valor do índice de uma matriz – por exemplo, [‘nome_do_banco’] – um valor de primeiro nível funciona porque eu posso fazer

$index = client_name; function arraything ($index) { return $this->arraytolookat[$index]; } 

A questão é … como faço isso, se é uma matriz multi-aninhada?

Eu tentei a indicação eval e, aparentemente, não avalia parênteses bem … Então eu tentei isso.

  $index = “[0]['client_name']”; Eval(“$this->arraytolookat$index”); 

Mas simplesmente falha … voa sobre uma inesperada [- alguma Idéia?

EDIT: Eu não sei quantos níveis essa function pode ser necessária para entrar, portanto, eu não posso apenas append uma quantidade fixa de suportes no final. Não é tão simples como parece ^^

EDIT 2: basicamente – escrevi uma ferramenta de validação de formulário e uma das funções retorna os dados corretos da publicação – queria um método simples que, quando você inserir o nome do elemento do formulário – literalmente, retornaria os dados do POST de volta ao elemento, por exemplo, getFormData (“nome do cliente”) – no entanto, quando um formulário se torna mais complexo, ele pode entrar em matrizes, preciso me preparar para a possibilidade de getFormData (“[‘$ i’] client_name”) ou somthing ao longo dessas linhas, coisas acontecem o postdata naquela class para que essa function seja usada. Eu só quero que essa function adote uma string não uma matriz.

Você pode passar uma série de índices para esta function abaixo. Então, se você quiser obter $some_array[0]['client_name']['third_level_index'] então você pode fazer isso:

 function get_array_value(array $array, array $indexes) { if (count($array) == 0 || count($indexes) == 0) { return false; } $index = array_shift($indexes); if(!array_key_exists($index, $array)){ return false; } $value = $array[$index]; if (count($indexes) == 0) { return $value; } if(!is_array($value)) { return false; } return get_array_value($value, $indexes); } $some_array = array(/* nested array */); $indexes = array(0, 'client_name', 'third_level_index'); $value = get_array_value($some_array, $indexes); 
 function arraything ($arrayOfIndexes) { $current = $this->array; foreach ($arrayOfIndexes as $curIndex) { $current = $current[$curIndex]; } return $current; } $x = arraything (array(0, 'client_thing')); 

Não há validação (por exemplo, para chaves ausentes), mas a idéia deve ser clara.

A function get_array_value funciona bem. Então escrevi uma function set_array_value.

Aqui vai:

 function get_array_value($array, $indexes) { if (count($indexes) == 1) { return $array[$indexes[0]]; } $index = array_shift($indexes); return get_array_value($array[$index], $indexes); } function set_array_value(&$array, $indexes, &$value) { if (count($indexes) == 1) { return $array[reset($indexes)] = $value; } $index = array_shift($indexes); return set_array_value($array[$index], $indexes, $value); } $some_array = array(); $some_array[0]['client_name']['id'] = 1; $some_array[1]['client_name']['id'] = 2; $indexes = array(0, 'client_name', 'id'); $value = get_array_value($some_array, $indexes); print_r($value); $id = 23; set_array_value($some_array, $indexes, $id); $value = get_array_value($some_array, $indexes); print_r($value); 

Espero que ajude 🙂

: Nirav

 $first = arraything(0); echo $first['client_name']; 

Parece que você está tentando sobrecarregar demais esse argumento. Pode ser reescrito para permitir isso de forma mais legal? Você pode retornar isso diretamente …

 $this->arraytolookat[0]['client_name']; 

Algumas estruturas possuem uma function auxiliar para acessar os membros da matriz com um operador, como . (em uma corda, é claro).

Tentei o loop foreach, não tenho certeza se é a melhor solução. é algo assim

 foreach($array as $key => $value){ arraything ($key); } 

ou use a function array_keys()

Intereting Posts