0

同じプレフィックスを持つ配列キーのグループを設定解除しようとしています。私はこれを機能させることができないようです。

foreach ($array as $key => $value) {
    unset($array['prefix_' . $key]);
    }

['prefix_' を表示するにはどうすれば設定を解除できますか。$key] を実際の変数として?ありがとう

更新: $array キーには、同じ名前の 2 つのキーがあります。1 つだけがプレフィックスを持ち、プレフィックス付きのキーを持つ約 5 つのキーがあります。

Array {
   [name] => name
   [prefix_name] => other name
}

配列から [name] だけを [prefix_name] だけ削除したくありません。

4

5 に答える 5

1

コレクションのコピーにすぎないため、foreach は使用できません。for を使用するか、キーを個別に取得し、操作する配列から処理を分離する必要があります。何かのようなもの:

foreach (array_keys($array) as $keyName){
  if (strncmp($keyName,'prefix_',7) === 0){
    unset($array[$keyName]);
  }
}

また、すべてのキーを取得するコレクションを既に繰り返し処理しています。あなたが持っていない限り:

$array = array(
  'foo' => 1,
  'prefix_foo' => 1
);

(すべてのキーには、その前に「prefix_」が付いた一致するキーもあります) 問題が発生します。

于 2011-10-12T20:36:53.373 に答える
1

あなたの質問を理解しているかどうかはわかりませんが、特定のプレフィックスを持つすべてのキーを設定解除しようとしている場合は、配列を反復処理して、プレフィックスに一致するキーを設定解除することができます。

何かのようなもの:

<?php
foreach ($array as $key => $value) {      // loop through keys
    if (preg_match('/^prefix_/', $key)) { // if the key stars with 'prefix_'
        unset($array[$key]);              // unset it
    }
}
于 2011-10-12T20:41:42.477 に答える
1

これは機能します:

$array = array(
  'aa' => 'other value aa',
  'prefix_aa' => 'value aa',
  'bb' => 'other value bb',
  'prefix_bb' => 'value bb'
);

$prefix = 'prefix_';
foreach ($array as $key => $value) {
  if (substr($key, 0, strlen($prefix)) == $prefix) {
     unset($array[$key]);
  }
}

このコードをhttp://writecodeonline.com/php/などのサイトにコピー アンド ペーストすると、動作することがわかります。

于 2011-10-12T21:05:47.463 に答える
0

すでに配列キーをループしているので、持っている場合

$array = (
    'prefix_a' => 'b',
    'prefix_c' => 'd'
     etc...
)

次に、 $keys は 、 などになりprefix_aますprefix_c...あなたがしているのは、 、 などの完全に新しいキーを生成することprefix_prefix_aですprefix_prefix_c...

もっと複雑なことをしていない限り、ループ全体を次のように置き換えることができます

$array = array();
于 2011-10-12T20:36:36.990 に答える
0

私はこれがうまくいくと信じています:

foreach ($array as $key => $value) {
    unset($array['prefix_' . str_replace('prefix_', '', $key]);
}
于 2011-10-12T20:36:59.257 に答える