Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php复杂关联数组与$\u POST匹配_Php_Mysql_Multidimensional Array - Fatal编程技术网

php复杂关联数组与$\u POST匹配

php复杂关联数组与$\u POST匹配,php,mysql,multidimensional-array,Php,Mysql,Multidimensional Array,我有一个数组 Array('0284'=>array('name'='XX', 'inputs'=array( array('sysname'=>'KEY_TO_MATCH1',....); array('sysname'=>'KEY_TO_MATCH2',....);

我有一个数组

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',....);
                                )
      );
我想要的是搜索$\u POST,如果键sysname存在,则返回数组'name'

示例:如果存在$\u POST['KEY\u TO\u MATCH1']返回XX

编辑

array
  'balloon' => 
    array
      'red' => 
        array
          1 => string 'Love' (length=4)
  'ribbon' => 
    array
      'red' => 
        array
          3 => string 'Love' (length=4)
          4 => string 'Love' (length=4)
阵列结构说明:

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

plugins(id,name,user_id)

plugins_inputs(id,plugin_id(FK),sysname,label,value,extra_attrs)
我要做的是获取所有插件及其输入,然后用plugins_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:指向处理这些输入的函数名

插件输入:包含多行输入

现在我想听听$\u POST case中提交的任何输入,然后重定向它 到处理它的特定函数<代码>$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);
 }
但我想知道是否有更聪明的方法。。使用数组过滤器或数组映射或其他。。。
}

首先尝试从所有值中生成一个数组。为此,您需要获取输入并将其与其数组键值耦合


如果您已经这样做了,那么利用您的帖子的价值,通过您刚刚创建的数组进行foreach。如果有匹配项,请返回数组键。

首先尝试从所有值中生成一个数组。为此,您需要获取输入并将其与其数组键值耦合


如果您已经这样做了,那么利用您的帖子的价值,通过您刚刚创建的数组进行foreach。如果有匹配项,请返回数组键。

您的体系结构非常复杂。我不知道您的用例,但我相信您可以通过消除输入中的双深度来简化它

如果保留(或必须保留)此体系结构,则必须进行搜索:

foreach($baseArray as $key=>$value){
    foreach($value['inputs'] as $subArray){
       if(subArray['sysname'] === $keyToMatch{
          return $key;
       }
    }
}
return '';

您的架构非常复杂。我不知道您的用例,但我相信您可以通过消除输入中的双深度来简化它

如果保留(或必须保留)此体系结构,则必须进行搜索:

foreach($baseArray as $key=>$value){
    foreach($value['inputs'] as $subArray){
       if(subArray['sysname'] === $keyToMatch{
          return $key;
       }
    }
}
return '';

首先,对数组结构进行排序。应该是这样的。我还将一些=更改为=>,并且;在代码中,因为它们是数组中的语法错误

$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;
    }
  }
}

首先,对数组结构进行排序。应该是这样的。我还将一些=更改为=>,并且;在代码中,因为它们是数组中的语法错误

$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;
    }
  }
}
试试这个

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

       }
 }
}
试试这个

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

       }
 }
}

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

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

您是否在_array()中使用过为什么0287和0284在两个不同的数组中。如果它们都是带值的键并且是唯一的,则将它们放在一个数组中(作为带数组值对的键)以启用循环。是否在_array()中使用过?为什么0287和0284在两个不同的数组中。如果它们都是带值的键并且是唯一的,则将它们放在单个数组中(作为带数组值对的键)以启用循环。这将不起作用,因为$\u POST['key\u to_MATCH1']不存在。他的架构很奇怪,我认为这才是最重要的。他的架构很奇怪,但是如果有人在PHP页面上发布了值(即通过表单/ajax),那么$\u POST变量就会存在。谢谢你纠正了数组,我可以做这个复合循环,但我想知道是否有一条捷径可以使用array\u filter或其他什么+1由于$u POST['KEY\u TO\u MATCH1']不存在,因此此项不起作用。他的架构很奇怪,我认为这才是最重要的。他的架构很奇怪,但是如果有人在PHP页面上发布了值(即通过表单/ajax),那么$\u POST变量就会存在。谢谢你纠正了数组,我可以做这个复合循环,但我想知道是否有一条捷径可以使用array\u filter或其他什么+1.