0

私は配列を持っています

Array('0284'=>array('name'='XX',
                    'inputs'=array(
                                array('sysname'=>'KEY_TO_MATCH1',....);
                                array('sysname'=>'KEY_TO_MATCH2',....);
                                  ),
      '0287'=>array('name'='YYY',
                    'inputs'=array(
                                array('sysname'=>'KEY_TO_MATCH3',....);
                                array('sysname'=>'KEY_TO_MATCH4',....);
                                )
      );

私が望むのは、キーsysnameが存在する場合に$_POSTを検索し、配列「名前」を返すことです..

$_POST['KEY_TO_MATCH1'] が存在する場合の例 XX を返す

編集

配列構造の説明:

配列はdbテーブルをフェッチした結果です

plugins(id,name,user_id)

plugins_inputs(id,plugin_id(FK),sysname,label,value,extra_attrs)

私がしていることは、すべてのプラグインとその入力を取得することです。次に、それらを pluigns_id で分離します

Array('plugins.id'=>array('name'='plugins.name',
                        'inputs'=array(//all rows from plugins_inputs where plugin_id=plugins.id
                                    array('sysname'=>'KEY_TO_MATCH1',....);
                                    array('sysname'=>'KEY_TO_MATCH2',....);
                                      )

plugins.id をキーとして: form.name を信頼できないため、重複を避けるため

plugins.name : これらの入力を処理する関数名を指します

plugins_inputs : 複数行の入力を含む

今私は $_POST ケースを聞きたいこれらの入力のいずれかが送信され、それを処理するフォーム固有の関数にリダイレクトします。$this->${plugins.name}->backend();

現在使用中

foreach($array as $id=>$val){
 foreach($val['inputs'] as $input)
  //$this->input->post is codeigniter help to handle $_POST[] if it doesnt exist it return false
   if($this->input->post([$input['sysname']])runbackend($val['name'],$id);
 }

しかし、よりスマートな方法があるかどうか疑問に思っていました..array_filterまたはarray_mapなどを使用して...}

4

5 に答える 5

1

$child は照合する値で、$stack は検索する配列です。

function getParentStackComplete($child, $stack) {
    $return = array();
    foreach ($stack as $k => $v) {
        if (is_array($v)) {
            // If the current element of the array is an array, recurse it 
            // and capture the return stack
            $stack = getParentStackComplete($child, $v);

            // If the return stack is an array, add it to the return
            if (is_array($stack) && !empty($stack)) {
                $return[$k] = $stack;
            }
        } else {
            // Since we are not on an array, compare directly
            if ($v == $child) {
                // And if we match, stack it and return it
                $return[$k] = $child;
            }
        }
    }

    // Return the stack
    return empty($return) ? false: $return;
}

:

$array = array(
    'balloon' => array(
        'red' => array(1 => 'Love', 'Valentine', 'Heart',),
        'green' => array(1 => 'Summertime', 'Hope',),
    ),
    'ribbon' => array(
        'yellow' => array(2 => 'Welcome',),
        'red' => array(3 => 'Love', 'Love',),
    ),
);
$c = getParentStackComplete('Love', $array);

結果

array
  'balloon' => 
    array
      'red' => 
        array
          1 => string 'Love' (length=4)
  'ribbon' => 
    array
      'red' => 
        array
          3 => string 'Love' (length=4)
          4 => string 'Love' (length=4)
于 2013-02-14T11:53:30.600 に答える
1

まず、配列構造を整理します。これが本来の姿か。また、あなたの = の一部を => と ; に変更しました。配列内の構文エラーであるため、コード内の to 。

$outerarray = array(
   '0284'=>array('name' => 'XX',
                 'inputs' => array(
                            array('sysname'=>'KEY_TO_MATCH1',....),
                            array('sysname'=>'KEY_TO_MATCH2',....),
                  )
           ),
   '0287'=>array('name' => 'YYY',
                 'inputs' => array(
                   array('sysname'=>'KEY_TO_MATCH3',....),
                   array('sysname'=>'KEY_TO_MATCH4',....),
                  )
           )); 
foreach ($outerarray as $outerkey=>$outervalue) {
  foreach ($outervalue[]['inputs'] as $searcharray) {
    foreach($searcharray as $key=>$value) {
      if ($value == $_POST['KEY_TO_MATCH1']) return $outerkey;
    }
  }
}
于 2013-02-14T11:51:01.287 に答える
1

これを試してみてください...

foreach($data as $key => $d) 
{

  foreach($d as $key => $dat) 
  {

       if(in_array("$_POST['KEY_TO_MATCH1']",$dat['inputs'])
       {
         echo $d['name'];
       }
       else {
       echo "Not found";

       }
 }
}
于 2013-02-14T11:51:50.593 に答える
0

まず、すべての値から 1 つの配列を作成してみてください。これを行うには、入力を取得し、それらを配列キー値と結合する必要があります。

これを行った場合は、投稿の値を取得し、作成した配列に対して foreach を実行します。一致する場合は、配列キーを返します。

于 2013-02-14T11:49:28.573 に答える
0

あなたのアーキテクチャは非常に複雑です。あなたのユースケースはわかりませんが、入力の二重の深さを取り除くことで単純化できると確信しています。

このアーキテクチャを保持する (または保持する必要がある) 場合は、検索を処理する必要があります。

foreach($baseArray as $key=>$value){
    foreach($value['inputs'] as $subArray){
       if(subArray['sysname'] === $keyToMatch{
          return $key;
       }
    }
}
return '';
于 2013-02-14T11:50:24.030 に答える