3 回答

TA貢獻(xiàn)1785條經(jīng)驗(yàn) 獲得超8個(gè)贊
array_push
返回新數(shù)組中的元素?cái)?shù)量,而不是更改后的數(shù)組,這就是您進(jìn)入2
輸出的原因。但這不是您唯一的問題,因?yàn)槟枰紤]到它$sub
也可以是一個(gè)數(shù)組,在這種情況下,使用array_push
將在輸出中為您提供一個(gè)數(shù)組數(shù)組。相反,使用array_merge
:
if ( is_array( $class_sub[ $sub['class'] ] ) ) {
? ? $new = array_merge( $class_sub[ $sub['class'] ], is_array($sub['sub']) ?? $sub['sub'] : array($sub['sub']));
} else {
? ? $new = array_merge( array($class_sub[ $sub['class'] ]),? is_array($sub['sub']) ?? $sub['sub'] : array($sub['sub']));
}
示例數(shù)據(jù)的輸出:
Array
(
? ? [0] => Array
? ? ? ? (
? ? ? ? ? ? [class] => one
? ? ? ? ? ? [sub] => Array
? ? ? ? ? ? ? ? (
? ? ? ? ? ? ? ? ? ? [0] => music
? ? ? ? ? ? ? ? ? ? [1] => social
? ? ? ? ? ? ? ? ? ? [2] => health
? ? ? ? ? ? ? ? ? ? [3] => science
? ? ? ? ? ? ? ? ? ? [4] => math
? ? ? ? ? ? ? ? )? ??
? ? ? ? )
? ? [1] => Array
? ? ? ? (
? ? ? ? ? ? [class] => two
? ? ? ? ? ? [sub] => music
? ? ? ? )
)

TA貢獻(xiàn)1942條經(jīng)驗(yàn) 獲得超3個(gè)贊
問題是你使用方法array_push
不對。該函數(shù)返回數(shù)組中的元素?cái)?shù)量,而不是數(shù)組本身 - 這些項(xiàng)目在第一個(gè)參數(shù)中添加到數(shù)組中,即$class_sub[ $sub['class'] ]
你的代碼中有這個(gè):
if ( is_array( $class_sub[ $sub['class'] ] ) ) {
? ? $new = array_push( $class_sub[ $sub['class'] ], $sub['sub'] );
} else {
? ? $new[] = $sub['sub'];
}
$class_sub[ $sub['class'] ] = $new;
這里發(fā)生的情況是,數(shù)組被添加到一起,然后數(shù)組項(xiàng)的計(jì)數(shù)$new( ) 被添加到$class_sub[ $sub['class'] ]。
試試這個(gè) - 這不會覆蓋$class_sub[ $sub['class'] ],它使用 array_merge 將數(shù)組添加在一起(這替換了整個(gè)foreach( $subjects as $sub )塊,而不僅僅是上面的代碼):
foreach( $subjects as $sub ) {
? ? /* prepare subjects as an array */
? ? if ( is_array( $sub['sub'] ) )? $subjects = $sub['sub'];
? ? else? ? ? ? ? ? ? ? ? ? ? ? ? ? $subjects = array($sub['sub']);
? ? if ( ! isset( $class_sub[ $sub['class'] ] ) )
? ? ? ? /* if this is the first subject for this class, there is no array to merge with */
? ? ? ? $class_sub[ $sub['class'] ] = $subjects;?
? ? else?
? ? ? ? /* We know both class and subject are arrays so we can merge them */
? ? ? ? $class_sub[$sub['class']] = array_merge( $class_sub[ $sub['class'] ], $subjects);
}

TA貢獻(xiàn)1887條經(jīng)驗(yàn) 獲得超5個(gè)贊
出于好奇,我編寫了您自己的函數(shù)版本。因此,這不是對您問題的直接答案,但也許,這里的其他人仍然感興趣,他們試圖按照您指定的方式“合并”數(shù)組。
function amerge($arr){
foreach ($arr as $e){
$sub=is_array($e["sub"])?$e["sub"]:array($e["sub"]);
foreach ($sub as $s) $p[$e["class"]][$s]=1;
}
$classes=array_keys($p);
foreach ($classes as $c)
$out[]=array("class"=>$c,"sub"=>array_keys($p[$c]));
return $out;
}
如需演示,請點(diǎn)擊此處: https: //rextester.com/QKULS37967
- 3 回答
- 0 關(guān)注
- 134 瀏覽
添加回答
舉報(bào)