我有阵列
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
修改
数组结构说明:
数组是获取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或者其他东西...... }
答案 0 :(得分: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;
}
}
}
答案 1 :(得分: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";
}
}
}
答案 2 :(得分: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);
<强> RESULT 强>
array
'balloon' =>
array
'red' =>
array
1 => string 'Love' (length=4)
'ribbon' =>
array
'red' =>
array
3 => string 'Love' (length=4)
4 => string 'Love' (length=4)
答案 3 :(得分:0)
首先尝试从所有值中生成1个数组。为此,您需要获取输入并将它们与数组键值相结合。
如果您已完成此操作,请获取帖子的值,并通过刚刚创建的阵列进行操作。如果匹配,则返回数组键。
答案 4 :(得分:0)
您的架构非常复杂。我不知道你的用例,但我相信你可以通过摆脱输入的双倍深度来简化它。
如果您保留(或必须保留)此架构,则必须处理搜索:
foreach($baseArray as $key=>$value){
foreach($value['inputs'] as $subArray){
if(subArray['sysname'] === $keyToMatch{
return $key;
}
}
}
return '';