是否可以内爆多个数组值?
根据我迄今为止所研究的内容,所有示例都包括使用implode(',',$ array)来破坏多维数组(使用array_map)或使用implde(',',$ array)对数组中的所有值进行内爆;
但是,我想知道是否有一种方法可以从数组中删除数组值:
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($array[0], '_', $array[2]);
但我发现它不起作用,因为允许2个参数
答案 0 :(得分:4)
在多维数组中使用implode的一些例子
$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;
答案 1 :(得分:1)
<?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
,您将得到欲望输出数组,因此您可以将它用于具有多个这样的元素的数组。 :)
答案 2 :(得分:0)
您可以尝试:
$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);
返回:
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
时
答案 3 :(得分:0)
您可以使用以下脚本:
$result = $array[0][0].'_'. $array[0][2];
echo $result;
输出:
abc_ghi
答案 4 :(得分:0)
我想我会借此机会为您更新的输入数据提供精确的答案。无论如何,我认为这是一种更简单的方法。
请参阅内联注释以获取解释。
代码:(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',
),
),
)