簡単に理解できない小さな問題があります。修正はおそらく非常に簡単ですが、私は自分で修正するにはあまりにも初心者です。おそらく、皆さんはこれに光を当てることができます。
問題
PHP で多次元配列を作成する必要があります。これはうまくいきます。ただし、最後のネストされた配列は 2 つの要素で構成されている場合もあれば、3 つの要素で構成されている場合もあります。したがって、この投稿のタイトルは「非対称」です。
この問題は、PHP コードのスイッチ変数に基づいてネストされた配列が作成されたことが原因である可能性が最も高いです。変数が定義されていない場合 ( $button
incase 'inactive'
など)、キーは$elements
とにかく配列内に配置されますが、値はありません。
PHPコード
$player = Array();
$data = @$_POST['players'];
if (!empty($data) && is_array($data)) {
foreach($data as $id){
$player_info = mysqli_query($connection, "SELECT * FROM players WHERE id = '$id'");
$player_info = mysqli_fetch_assoc($player_info);
switch ($player_info['status']) {
case 'active':
$color = '#30B490';
$status = 'active';
$button = 'buttons';
break;
case 'inactive':
$color = '#A1A1A1';
$status = 'inactive';
break;
case 'standby':
$color = '#F0AD4E';
$status = 'standby';
$button = 'buttons';
break;
default:
$color = '#4FA1D9';
$status = 'unknown';
break;
}
// THIS PART SEEMS TO CAUSE MY ISSUE
$elements = array(
"indicator" => $color,
"status" => $status,
"button" => $button
);
// THIS PART SEEMS TO CAUSE MY ISSUE
foreach ($elements as $label => $element) {
$player[$id][$label] = $element;
}
}
}
print_r($player);
print_r() の結果
現在
Array (
[1] => Array (
[indicator] => #A1A1A1
[status] => inactive
[button] =>
)
[2] => Array (
[indicator] => #30B490
[status] => active
[button] => yes
)
[3] => Array (
[indicator] => #4FA1D9
[status] => standby
[button] => yes
)
)
あるべき姿
Array (
[1] => Array (
[indicator] => #A1A1A1
[status] => inactive
)
[2] => Array (
[indicator] => #30B490
[status] => active
[button] => yes
)
[3] => Array (
[indicator] => #4FA1D9
[status] => standby
[button] => yes
)
)
2 つの結果の違いがわかります。を見てください[button] =>
。多次元配列全体を json_encode() すると、結果はnull
正しくないように見える値を示します。
{"1":{"indicator":"#A1A1A1","status":"inactive","button":null},"2":{"indicator":"#30B490","status":"active","button":"buttons"},"3":{"indicator":"#4FA1D9","status":"unknown","button":"buttons"}}
私が欲しいもの
「あるべき姿」のprint_r()
結果に示されているように、多次元配列を(空の値なしで)きれいにしたいと思います。
適切な多次元配列を作成するには、PHP コードで何を編集すればよいでしょうか?
よろしく、ピーター・デ・レーウ