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',....);
                                )
      );

我想要的是搜索 $_POST 如果密钥 sysname 存在然后返回数组'name'..

例如,如果 $_POST['KEY_TO_MATCH1'] 存在则返回 XX

编辑

数组结构说明:

数组是获取数据库表的结果

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

试试这个...

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 回答
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

$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 回答
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 回答