[英]PHP array multidimensional cross all elements
我需要從dinamic結構創建一個sql語句。 結構來自多維數組。 顯示它更難解釋,所以我展示了3個例子:
例1:如果我有這個數組:
myarry Array
(
[5] => Array
(
[0] => 2
[1] => 5
)
[6] => Array
(
[0] => 11
)
)
我需要創建一個字符串,如:(2 AND 11)OR(5 AND 11)
例2:如果我有這個數組:
myarry Array
(
[5] => Array
(
[0] => 2
[1] => 5
)
[6] => Array
(
[0] => 11
[1] => 8
)
)
我需要創建一個字符串,如:(2 AND 11)OR(5 AND 11)OR(2 AND 8)OR(5 AND 8)
例3:如果我有這個數組:
myarry Array
(
[5] => Array
(
[0] => 2
[1] => 5
)
[6] => Array
(
[0] => 11
)
[7] => Array
(
[0] => 70
[1] => 71
[2] => 72
)
)
我需要創建一個字符串,如:(2 AND 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++;
}
$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;
}
}
但我甚至不接近解決方案:(我希望問題很清楚。歡迎任何幫助!
這是源代碼中的自定義函數,有一些修改,
首先,我創建了所有數組元素的唯一組合,如集合,然后我映射它們以創建所需的字符串。
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);
array_walk - 將用戶提供的函數應用於數組的每個成員
array_shift - 從數組的開頭移出一個元素
演示 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.