PHPの連想配列から空のキーを持つ値を削除するにはどうすればよいですか?
-
04-07-2019 - |
質問
空の文字列のように見えるキーがありますが、 unset($ array [""]);
を使用してもキー/値のペアは削除されません。私が望んでいることをする別の関数が表示されないので、関数を呼び出すだけの方が複雑だと推測しています。
print_rの要素の行は [] =>です。 1
。これは、キーが空の文字列であることを示しています。
var_exportを使用すると、要素は '' =>としてリストされます。 1
。
var_dumpを使用すると、要素は [""] => int(1)
としてリストされます。
これまで、提案されたすべての削除方法を試しましたが、要素を削除したものはありません。 unset($ array [""]);
、 unset($ array ['']);
、および unset($ array [ null]);
運がありません。
解決
unset($ array [null]);
それでもうまくいかない場合は、 print_r
ではなく var_export
または var_dump
を使用して配列を印刷します。キーの。 var_export
を使用して、PHP構文のデータを表示します。
var_export($ array);
var_exportは再帰構造では機能しないことに注意してください。
他のヒント
試した:
$someList = Array('A' => 'Foo', 'B' => 'Bar', '' => 'Bah');
print_r($someList);
echo '<br/>';
unset($someList['A']);
print_r($someList);
echo '<br/>';
unset($someList['']);
print_r($someList);
echo '<br/>';
重要:
Array ( [A] => Foo [B] => Bar [] => Bah )
Array ( [B] => Bar [] => Bah )
Array ( [B] => Bar )
キーの出所も分析する必要があります...
空の文字列ではないようです。以下を試して、得られるものを確認してください。
foreach ($array as $index => $value) {
echo $index;
echo ' is ';
echo gettype($index);
echo "\n";
}
print_r
の代わりに var_dump
を使用してみてください。これにより、キーが正確に何であるかをよりよく理解できる場合があります。
何を伝えればよいかわかりません。このスクリプトの実行
<?php
$arr = array(
false => 1
, true => 2
, null => 3
, 'test' => 4
// , '' => 5
);
print_r( $arr );
foreach ( $arr as $key => $value )
{
var_dump( $key );
}
unset( $arr[''] );
print_r( $arr );
次の出力が表示されます
Array
(
[0] => 1
[1] => 2
[] => 3
[test] => 4
)
int(0)
int(1)
string(0) ""
string(4) "test"
Array
(
[0] => 1
[1] => 2
[test] => 4
)
&quot; null&quot;配列キーが空の文字列に型変換されましたか?
アレイのコピーを使用していないのですか?関数内からこのunset()の呼び出しを行った場合、あなたがいる可能性があります。
これはPHP 5.2.0でテストされました
その行の前後に要素とチェッカーコードを削除するために使用するコードを投稿してください。
探しているのは次のようなものです:
var_export($array);
echo "\n";
unset($array[""]);
var_export($array);
var_export
の両方の行の完全な出力も投稿してください。
次のようなものを探しています:
array (
'' => 1,
)
array (
)