在循环中加入数组中的最多 3 个值
Joining up to 3 values in an array in a loop
我正在尝试 运行 一些逻辑测试并将字符串列表与数据库进行匹配,但需要有关我拥有的数组的帮助。
问题
我有一个数组:
$myArray =
array([0] (
array [0] ([0] A, [1] B, [2] C, [3] H)
array [1] ([0] A, [1] D, [2] G, [3] H, [4] L)
array [2] ([0] D, [1] Z, [2] J, [3] K, [4] O, [5] X)
)
array([1] (
array [2] ([0] F, [1] Y, [2] W, [3] H, [4] L)
)
array([2] (
array [0] ([0] O, [1] T, [2] C, [4] O, [5] X)
array [1] ([0] U, [1] E, [2] E, [3] D)
))
我正在尝试根据一个列表测试此数组中的字符串,该列表将 1、2 和 3 个字符串与 table 中的“_”组合在一起。
示例:A 或 A_B 或 A_B_C
变量和常量
- 数组的第二个维度的数组长度可以不同
- 字符串可以重复多次,与逻辑无关
- 然而,不变的是组合两个字符串或三个字符串的测试总是顺序的(例如总是A_B或A_B_C而不是A_D或A_D _J 如果说得通的话)
- 序列每次移动一个字母,例如首先测试(A_B_C,A_B 和 A),然后测试(B_C_D,B_C 和 B),然后(C_D_E 等...)
- 当数组中的字符串不足以继续测试 2 或 3 个组合词时,那么测试应该 运行 1 个字符串
我正在尝试做什么和期望的结果
我需要数组语法方面的帮助,以帮助我将代码构建为循环中的 3 级逻辑参数
像这样:
如果 A_B_C 存在于 myTable 中,则做某事
ELSE IF A_B 存在做其他事情
ELSE IF A 存在做另一件事
ELSE return 空白
不过我不太明白如何操作上面的数组以获得变量
$firstTest = 'A_B_C'; <br>
$secondTest = 'A_B'; <br>
$thirdTest = 'A'; <br>
(我能考到第三次)
我试过的
通过在其他数组问题上获得一些有用的帮助,我尝试通过 foreach 循环传递 $myArray,如下所示:
foreach ($myArray as $newArray) {
$i = 0;
$j = $i++;
foreach($newArray as $key=>$val) {
$impArray = array($val[$i],$val[$j]);
echo implode('_', $impArray);
}
}
然而,这需要每个第一级数组的第一个字符串。
编辑:
我一直在试验 array_slice 并做了一段时间,几乎可以到达那里,但模式并不完全遵循 3x 字符串组合;相反,它从 3 串增加到 4 串,再到 5 串等等......我不知道为什么。
这是我最近的尝试:
foreach ($myArray as $newArray => $val) {
$x = 0;
$z = 3;
$route = array();
do {
$route = array_slice($val, $x , $z);
$imp_route = implode('_', $route);
echo $imp_route;
$x++;
$z++;
} while ( $z <= count($val));
}
也许有更好的方法,但这种方法可以清楚地说明您要完成的任务:
foreach ($myArray as $newArray) {
foreach ($newArray as $valuesArray) {
for ($i=0; $i<count($valuesArray); $i++) {
// A_B_C
if (isset($valuesArray[$i+2])) {
echo $valuesArray[$i] . '_' . $valuesArray[$i+1] . '_' . $valuesArray[$i+2];
}
// A_B
if (isset($valuesArray[$i+1])) {
echo $valuesArray[$i] . '_' . $valuesArray[$i+1];
}
// A
echo $valuesArray[$i];
}
}
}
我正在尝试 运行 一些逻辑测试并将字符串列表与数据库进行匹配,但需要有关我拥有的数组的帮助。
问题
我有一个数组:
$myArray =
array([0] (
array [0] ([0] A, [1] B, [2] C, [3] H)
array [1] ([0] A, [1] D, [2] G, [3] H, [4] L)
array [2] ([0] D, [1] Z, [2] J, [3] K, [4] O, [5] X)
)
array([1] (
array [2] ([0] F, [1] Y, [2] W, [3] H, [4] L)
)
array([2] (
array [0] ([0] O, [1] T, [2] C, [4] O, [5] X)
array [1] ([0] U, [1] E, [2] E, [3] D)
))
我正在尝试根据一个列表测试此数组中的字符串,该列表将 1、2 和 3 个字符串与 table 中的“_”组合在一起。
示例:A 或 A_B 或 A_B_C
变量和常量
- 数组的第二个维度的数组长度可以不同
- 字符串可以重复多次,与逻辑无关
- 然而,不变的是组合两个字符串或三个字符串的测试总是顺序的(例如总是A_B或A_B_C而不是A_D或A_D _J 如果说得通的话)
- 序列每次移动一个字母,例如首先测试(A_B_C,A_B 和 A),然后测试(B_C_D,B_C 和 B),然后(C_D_E 等...)
- 当数组中的字符串不足以继续测试 2 或 3 个组合词时,那么测试应该 运行 1 个字符串
我正在尝试做什么和期望的结果
我需要数组语法方面的帮助,以帮助我将代码构建为循环中的 3 级逻辑参数
像这样:
如果 A_B_C 存在于 myTable 中,则做某事
ELSE IF A_B 存在做其他事情
ELSE IF A 存在做另一件事
ELSE return 空白
不过我不太明白如何操作上面的数组以获得变量
$firstTest = 'A_B_C'; <br>
$secondTest = 'A_B'; <br>
$thirdTest = 'A'; <br>
(我能考到第三次)
我试过的
通过在其他数组问题上获得一些有用的帮助,我尝试通过 foreach 循环传递 $myArray,如下所示:
foreach ($myArray as $newArray) {
$i = 0;
$j = $i++;
foreach($newArray as $key=>$val) {
$impArray = array($val[$i],$val[$j]);
echo implode('_', $impArray);
}
}
然而,这需要每个第一级数组的第一个字符串。
编辑:
我一直在试验 array_slice 并做了一段时间,几乎可以到达那里,但模式并不完全遵循 3x 字符串组合;相反,它从 3 串增加到 4 串,再到 5 串等等......我不知道为什么。
这是我最近的尝试:
foreach ($myArray as $newArray => $val) {
$x = 0;
$z = 3;
$route = array();
do {
$route = array_slice($val, $x , $z);
$imp_route = implode('_', $route);
echo $imp_route;
$x++;
$z++;
} while ( $z <= count($val));
}
也许有更好的方法,但这种方法可以清楚地说明您要完成的任务:
foreach ($myArray as $newArray) {
foreach ($newArray as $valuesArray) {
for ($i=0; $i<count($valuesArray); $i++) {
// A_B_C
if (isset($valuesArray[$i+2])) {
echo $valuesArray[$i] . '_' . $valuesArray[$i+1] . '_' . $valuesArray[$i+2];
}
// A_B
if (isset($valuesArray[$i+1])) {
echo $valuesArray[$i] . '_' . $valuesArray[$i+1];
}
// A
echo $valuesArray[$i];
}
}
}