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.