内爆多个数组值
implode multiple array values
是否可以内爆多个数组值?
根据我目前的研究,所有示例都包括内爆多维数组(使用 array_map)或使用 implode(',', $array);[=13 内爆数组中的所有值=]
但是,我想知道是否有办法从数组中分解数组值:
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)
))
注意:每个数组中的字符串可以重复多次,与结果无关。
期望的结果
得出如下所示的结果:
$result = array(
array [0] (A_C, B_H, C)
array [1] (A_G, D_H, G_L)
etc...
预期的结果应该让我测试一下,如果不能合并值(因为它在数组的末尾),则显示单个值
作为初学者,我的第一个选择是尝试 implode implode($array[0], '_', $array[2]);
但我发现它不起作用,因为允许使用 2 个参数
你可以试试:
$array = array(0 => "abc", 1 => "zyx", 2 => "bcf", 3 => "jhf");
$output = array();
for ($i = 0; $i < count($array); $i++)
{
$output[] = $array[$i] . "_" . $array[$i+2];
}
var_dump($output);
Returns:
array(4) {
[0]=>
string(7) "abc_bcf"
[1]=>
string(7) "zyx_jhf"
[2]=>
string(4) "bcf_" // $i+2 issue
[3]=>
string(4) "jhf_" // $i+2 issue
}
虽然这很糟糕,例如,当您在 $array
的倒数第二个条目 + 上时,没有 $i+2
您可以使用以下脚本:
$result = $array[0][0].'_'. $array[0][2];
echo $result;
输出:
abc_ghi
在多维数组中使用内爆的一些例子
$sampleArray = array(array('abc', 'def', 'hij'), array('mno', 'xxy', 'kkl'));
foreach($sampleArray as $key => $val) {
$impArray = array($val[0], $val[2]);
echo implode('_', $impArray);
}
-- -- -- -- -- -Dynamic implode with array first and last value-- -- -- -- -
$sampleArray = array(array('abc', 'def', 'hij'), array('mno', 'xxy', 'kkl'));
foreach($sampleArray as $key => $val) {
$count = count($val);
if ($count > 1) {
$first = reset($val);
$last = end($val);
$impArray = array($first, $last);
} else {
$first = reset($val);
$impArray = array($first);
}
echo implode('_', $impArray);
}
-- -- -- -- -- -- -- -- -- -- -- -Fully Dynamic with odd, even rules-- -- -- -- --
$finalArray = array();
$sampleArray = array(array('abc', 'def', 'hij', 'dsfd', 'fff'), array('mno', 'xxy', 'kkl'));
foreach($sampleArray as $key => $val) {
$oddEvenArr = make_array_odd_even($val);
if (!empty($oddEvenArr['odd']) || !empty($oddEvenArr['even'])) {
$findMaxSize = 0;
$oddSize = count($oddEvenArr['odd']);
$evenSize = count($oddEvenArr['even']);
if ($oddSize > $evenSize) {
$findMaxSize = $oddSize;
} else {
$findMaxSize = $evenSize;
}
for ($i = 0; $i < $findMaxSize; $i++) {
if (array_key_exists($i, $oddEvenArr['even'])) {
$finalArray[$key][] = implode('_', $oddEvenArr['even'][$i]);
}
if (array_key_exists($i, $oddEvenArr['odd'])) {
$finalArray[$key][] = implode('_', $oddEvenArr['odd'][$i]);
}
}
}
}
function make_array_odd_even($temp) {
$odd = array();
$even = array();
foreach($temp as $k => $v) {
if ($k % 2 == 0) {
$even[] = $v;
} else {
$odd[] = $v;
}
}
$oddChunk = array_chunk($odd, 2);
$evenChunk = array_chunk($even, 2);
return array('odd' => $oddChunk, 'even' => $evenChunk);
}
echo "<pre>";
print_r($finalArray);
die;
<?php
$a = array('abc','def','ghi');
$b[0]=$a;
foreach($b as $key=>$val){
array_splice($val, 1, 1);
$val=implode('_', $val);
$output[$key]= $val;
echo $val;
}
var_dump($output);
?>
你能试试这个吗?
使用 $Output
您将获得所需输出的数组,因此您也可以将它用于具有多个元素的数组。 :)
我想我会借此机会为您更新的输入数据提供一个完善的答案。无论如何,我认为这是一种更简单的方法。
请参阅内联注释以获取解释。
代码:(Demo)
$array=[
[
['A','B','C','H'],
['A','D','G','H','L'],
['D','Z','J','K','O','X']
],
[
2=>['F','Y','W','H','L']
],
[
['O','T','C','O','X'],
['U','E','E','D']
]
];
foreach($array as $k1=>$lev2){
foreach($lev2 as $k2=>$lev3){
foreach($lev3 as $i=>$v){
if(isset($lev3[$i+2])){ // if can be paired with desired value
$result[$k1][$k2][]="{$lev3[$i]}_{$lev3[$i+2]}";
}else{
if($i%2==0){ // if index is even
$result[$k1][$k2][]=$lev3[$i]; // store the single value
}
break; // stop the loop when no future pairing can be done
}
}
}
}
var_export($result);
输出:
array (
0 =>
array (
0 =>
array (
0 => 'A_C',
1 => 'B_H',
2 => 'C',
),
1 =>
array (
0 => 'A_G',
1 => 'D_H',
2 => 'G_L',
),
2 =>
array (
0 => 'D_J',
1 => 'Z_K',
2 => 'J_O',
3 => 'K_X',
4 => 'O',
),
),
1 =>
array (
2 =>
array (
0 => 'F_W',
1 => 'Y_H',
2 => 'W_L',
),
),
2 =>
array (
0 =>
array (
0 => 'O_C',
1 => 'T_O',
2 => 'C_X',
),
1 =>
array (
0 => 'U_E',
1 => 'E_D',
2 => 'E',
),
),
)
是否可以内爆多个数组值?
根据我目前的研究,所有示例都包括内爆多维数组(使用 array_map)或使用 implode(',', $array);[=13 内爆数组中的所有值=]
但是,我想知道是否有办法从数组中分解数组值:
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)
))
注意:每个数组中的字符串可以重复多次,与结果无关。
期望的结果
得出如下所示的结果:
$result = array(
array [0] (A_C, B_H, C)
array [1] (A_G, D_H, G_L)
etc...
预期的结果应该让我测试一下,如果不能合并值(因为它在数组的末尾),则显示单个值
作为初学者,我的第一个选择是尝试 implode implode($array[0], '_', $array[2]);
但我发现它不起作用,因为允许使用 2 个参数
你可以试试:
$array = array(0 => "abc", 1 => "zyx", 2 => "bcf", 3 => "jhf");
$output = array();
for ($i = 0; $i < count($array); $i++)
{
$output[] = $array[$i] . "_" . $array[$i+2];
}
var_dump($output);
Returns:
array(4) {
[0]=>
string(7) "abc_bcf"
[1]=>
string(7) "zyx_jhf"
[2]=>
string(4) "bcf_" // $i+2 issue
[3]=>
string(4) "jhf_" // $i+2 issue
}
虽然这很糟糕,例如,当您在 $array
的倒数第二个条目 + 上时,没有 $i+2
您可以使用以下脚本:
$result = $array[0][0].'_'. $array[0][2];
echo $result;
输出:
abc_ghi
在多维数组中使用内爆的一些例子
$sampleArray = array(array('abc', 'def', 'hij'), array('mno', 'xxy', 'kkl'));
foreach($sampleArray as $key => $val) {
$impArray = array($val[0], $val[2]);
echo implode('_', $impArray);
}
-- -- -- -- -- -Dynamic implode with array first and last value-- -- -- -- -
$sampleArray = array(array('abc', 'def', 'hij'), array('mno', 'xxy', 'kkl'));
foreach($sampleArray as $key => $val) {
$count = count($val);
if ($count > 1) {
$first = reset($val);
$last = end($val);
$impArray = array($first, $last);
} else {
$first = reset($val);
$impArray = array($first);
}
echo implode('_', $impArray);
}
-- -- -- -- -- -- -- -- -- -- -- -Fully Dynamic with odd, even rules-- -- -- -- --
$finalArray = array();
$sampleArray = array(array('abc', 'def', 'hij', 'dsfd', 'fff'), array('mno', 'xxy', 'kkl'));
foreach($sampleArray as $key => $val) {
$oddEvenArr = make_array_odd_even($val);
if (!empty($oddEvenArr['odd']) || !empty($oddEvenArr['even'])) {
$findMaxSize = 0;
$oddSize = count($oddEvenArr['odd']);
$evenSize = count($oddEvenArr['even']);
if ($oddSize > $evenSize) {
$findMaxSize = $oddSize;
} else {
$findMaxSize = $evenSize;
}
for ($i = 0; $i < $findMaxSize; $i++) {
if (array_key_exists($i, $oddEvenArr['even'])) {
$finalArray[$key][] = implode('_', $oddEvenArr['even'][$i]);
}
if (array_key_exists($i, $oddEvenArr['odd'])) {
$finalArray[$key][] = implode('_', $oddEvenArr['odd'][$i]);
}
}
}
}
function make_array_odd_even($temp) {
$odd = array();
$even = array();
foreach($temp as $k => $v) {
if ($k % 2 == 0) {
$even[] = $v;
} else {
$odd[] = $v;
}
}
$oddChunk = array_chunk($odd, 2);
$evenChunk = array_chunk($even, 2);
return array('odd' => $oddChunk, 'even' => $evenChunk);
}
echo "<pre>";
print_r($finalArray);
die;
<?php
$a = array('abc','def','ghi');
$b[0]=$a;
foreach($b as $key=>$val){
array_splice($val, 1, 1);
$val=implode('_', $val);
$output[$key]= $val;
echo $val;
}
var_dump($output);
?>
你能试试这个吗?
使用 $Output
您将获得所需输出的数组,因此您也可以将它用于具有多个元素的数组。 :)
我想我会借此机会为您更新的输入数据提供一个完善的答案。无论如何,我认为这是一种更简单的方法。
请参阅内联注释以获取解释。
代码:(Demo)
$array=[
[
['A','B','C','H'],
['A','D','G','H','L'],
['D','Z','J','K','O','X']
],
[
2=>['F','Y','W','H','L']
],
[
['O','T','C','O','X'],
['U','E','E','D']
]
];
foreach($array as $k1=>$lev2){
foreach($lev2 as $k2=>$lev3){
foreach($lev3 as $i=>$v){
if(isset($lev3[$i+2])){ // if can be paired with desired value
$result[$k1][$k2][]="{$lev3[$i]}_{$lev3[$i+2]}";
}else{
if($i%2==0){ // if index is even
$result[$k1][$k2][]=$lev3[$i]; // store the single value
}
break; // stop the loop when no future pairing can be done
}
}
}
}
var_export($result);
输出:
array (
0 =>
array (
0 =>
array (
0 => 'A_C',
1 => 'B_H',
2 => 'C',
),
1 =>
array (
0 => 'A_G',
1 => 'D_H',
2 => 'G_L',
),
2 =>
array (
0 => 'D_J',
1 => 'Z_K',
2 => 'J_O',
3 => 'K_X',
4 => 'O',
),
),
1 =>
array (
2 =>
array (
0 => 'F_W',
1 => 'Y_H',
2 => 'W_L',
),
),
2 =>
array (
0 =>
array (
0 => 'O_C',
1 => 'T_O',
2 => 'C_X',
),
1 =>
array (
0 => 'U_E',
1 => 'E_D',
2 => 'E',
),
),
)