PHP数组多维跨所有元素
我需要从dinamic结构创建一个sql语句。该结构来自多维数组。说明它更难,所以我举3个例子: 示例1:如果我有这个数组:PHP数组多维跨所有元素,php,arrays,multidimensional-array,Php,Arrays,Multidimensional Array,我需要从dinamic结构创建一个sql语句。该结构来自多维数组。说明它更难,所以我举3个例子: 示例1:如果我有这个数组: myarry Array ( [5] => Array ( [0] => 2 [1] => 5 ) [6] => Array ( [0] => 11 ) ) myarry Array (
myarry Array
(
[5] => Array
(
[0] => 2
[1] => 5
)
[6] => Array
(
[0] => 11
)
)
myarry Array
(
[5] => Array
(
[0] => 2
[1] => 5
)
[6] => Array
(
[0] => 11
[1] => 8
)
)
myarry Array
(
[5] => Array
(
[0] => 2
[1] => 5
)
[6] => Array
(
[0] => 11
)
[7] => Array
(
[0] => 70
[1] => 71
[2] => 72
)
)
我需要创建一个字符串,如:
(2及11)或(5及11)
示例2:如果我有这个数组:
myarry Array
(
[5] => Array
(
[0] => 2
[1] => 5
)
[6] => Array
(
[0] => 11
)
)
myarry Array
(
[5] => Array
(
[0] => 2
[1] => 5
)
[6] => Array
(
[0] => 11
[1] => 8
)
)
myarry Array
(
[5] => Array
(
[0] => 2
[1] => 5
)
[6] => Array
(
[0] => 11
)
[7] => Array
(
[0] => 70
[1] => 71
[2] => 72
)
)
我需要创建一个字符串,如:
(2及11)或(5及11)或(2及8)或(5及8)
示例3:如果我有这个数组:
myarry Array
(
[5] => Array
(
[0] => 2
[1] => 5
)
[6] => Array
(
[0] => 11
)
)
myarry Array
(
[5] => Array
(
[0] => 2
[1] => 5
)
[6] => Array
(
[0] => 11
[1] => 8
)
)
myarry Array
(
[5] => Array
(
[0] => 2
[1] => 5
)
[6] => Array
(
[0] => 11
)
[7] => Array
(
[0] => 70
[1] => 71
[2] => 72
)
)
我需要创建一个字符串,如:
(2及11及70)或(2及11及71)或(2及11及72)或(5及11及70)或(5及11及71)或(5及11及72)
等等。。。
数组上的索引并不重要
我已经试过了:
foreach ($myarry as $clave => $feature){
${"feat_$n"} = $feature;
$n++;
}
$quan= count($myarry);
foreach ($feat_0 as $feature1) {
for ($m = 1; $m < $quan; $m++){
$name = "feat_{$m}";
foreach ($$name as $feature2) {
echo "OR feature1: ".$feature1." AND feature2: ".$feature2."<br>";
}
}
}
foreach($myarry as$clave=>$feature){
${“feat_$n”}=$feature;
$n++;
}
$quan=计数($myarry);
foreach($feature\u 0作为$feature1){
对于($m=1;$m<$quan;$m++){
$name=“feat_{$m}”;
foreach($$name作为$feature2){
echo“或feature1:.$feature1.”和feature2:.$feature2.“
”;
}
}
}
而且:
foreach ($myarry as $clave => $feature){
${"feat_$n"} = $feature;
$n++;
}
$i = 0;
foreach ($feat_0 as $clave0 => $feature0) {
for ($m = 1; $m < $cantidad; $m++){
$name = "feat_{$m}";
foreach ($$name as $clave1 => $feature1) {
echo "-feature0: ".$feature0." - feature1: ".$feature1." - i: ".$i." - m: ".$m."<br>";
$i++;
if($m == 1)
$indice = $feature1;
else
$pena[$feature0][$indice][$i] = $feature1;
}
$i=0;
}
}
foreach($myarry as$clave=>$feature){
${“feat_$n”}=$feature;
$n++;
}
$i=0;
foreach($feat_0作为$clave0=>$feature0){
对于($m=1;$m<$cantidad;$m++){
$name=“feat_{$m}”;
foreach($$name作为$clave1=>$feature1){
echo“-feature0:“.$feature0.”-feature1:“.$feature1.”-i:“.i.”-m:“.m.”
”;
$i++;
如果($m==1)
$indice=$feature1;
其他的
$pena[$feature0][$indice][$i]=$feature1;
}
$i=0;
}
}
但我甚至不接近解决方案:(
我希望问题是清楚的。
欢迎任何帮助!这里是来自的自定义函数,经过一些修改 首先,我创建了所有数组元素(如集合)的唯一组合,然后映射它们以创建所需的字符串
function custom_function($myarry)
{
if (count($myarry) == 0) {
return array();
}
$a = array_shift($myarry);
if (count($myarry) == 0) {
$c = array(array());
} else {
$c = custom_function($myarry); // recursive call
}
$r = array();
foreach ($a as $v) {
foreach ($c as $p) {
$r[] = array_merge(array($v), $p);
}
}
return $r;
}
$temp = custom_function($myarry);
$andArr = [];
array_walk($temp, function ($item, $key) use (&$andArr) {
$andArr[] = '(' . implode(" AND ", $item) . ') ';
});
$str = implode(' OR ', $andArr);
-将用户提供的函数应用于阵列的每个成员-将元素从数组的开头移开
.使用
内爆('AND')
来创建内部字符串,使用内爆('OR')
来创建外部字符串。StackOverflow不是免费的编码服务。请更新您的问题以显示您在a中已经尝试过的内容。有关更多信息,请参阅,并选择:)基本上你需要所有的组合-试着这样做forst,然后使用内爆
来创建实际的查询,对不起,我以前没有放我的代码,因为我还没有接近。。。但我要更新我的问题。我认为内爆不起作用,因为所有元素都在它们之间。这里有一个非常简单的解决方案:谢谢Rahul!它很有魅力!你太棒了!