3

配列のインデックス値(例:['client_name'])を関数に渡したいのですが、最初のレベルの値は機能します。

        $index = client_name;

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

問題は…マルチネスト配列の場合、どうすればよいですか?

私はevalステートメントを試しましたが、どうやらそれは括弧をうまく評価していません…それで私はこれを試しました。

        $index = “[0][‘client_name’]”;

        Eval(“$this->arraytolookat$index”);

しかし、それは失敗するだけです…予期しないことについての翼[-アイデアはありますか?

編集:この関数がいくつのレベルに入る必要があるかわからないので、最後に設定された量の括弧を追加することはできません。見た目ほど単純ではありません^^

編集2:基本的に-私はフォーム検証ツールを作成し、関数の1つが正しい投稿データを返します-フォーム要素の名前を入力すると、文字通りPOSTデータを要素に返す簡単なメソッドが必要でした。 getFormData( "client_name")-ただし、フォームがより複雑になると、配列に入る可能性があります。getFormData( "['$ i'] client_name")またはそれらの行に沿った何かの可能性に備える必要があります。そのクラスのpostdataであるため、関数を使用する必要があります。その関数に配列ではなく文字列を取り込んでもらいたいだけです。

4

5 に答える 5

10

以下のこの関数にインデックスの配列を渡すことができます。したがって、取得したい場合は$some_array[0]['client_name']['third_level_index']、これを行うことができます:

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);
于 2011-03-28T11:30:21.420 に答える
5
function arraything ($arrayOfIndexes) {
  $current = $this->array;
  foreach ($arrayOfIndexes as $curIndex) {
    $current = $current[$curIndex];
  }
  return $current;
}

$x = arraything (array(0, 'client_thing'));

検証はありませんが(たとえば、キーが欠落している場合)、アイデアは明確である必要があります。

于 2011-03-28T11:29:15.167 に答える
2

get_array_value 関数はうまく機能します。そこで、set_array_value 関数も作成しました。

ここに行きます:

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

それが役に立てば幸い :-)

:ニラフ

于 2011-09-06T17:00:48.570 に答える
0

foreachループを試しましたが、それが最善の解決策かどうかはわかりません。このようなものになります

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

またはarray_keys()関数を使用します

于 2011-03-28T11:29:08.770 に答える
0
$first = arraything(0);

echo $first['client_name'];

その引数にオーバーロードしようとしているようです。これをよりきれいな方法で許可するように書き直すことはできますか? これを直接返すことができます...

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

一部のフレームワークには、(もちろん文字列内で)などの演算子を使用して配列メンバーにアクセスするためのヘルパー関数があります。.

于 2011-03-28T11:24:36.383 に答える