私は次のPHP配列を持っています:
$data = Array
(
[rules1.txt] => Array
(
[rules] => Array
(
[0] => throw rule blah
[1] => punt rule blah
[2] => #comment
[3] =>
[4] => #punt rule that is commented out
)
[item] => rules1
[itemId] => 4
[new] => true
)
[rules2.txt] => Array
(
...
)
...
)
私が関わっている配列の一部は、$data['rules']とそのキーと値です。配列のこの部分にはさまざまな数のキーがあり、もちろん値もさまざまです。
私がやろうとしているのは、「throw」や「punt」などの特定のキーワードで始まる値を「検索」することです...空白行($ data ['rules'] [3]など)とコメント付きの値($ data ['rules'][2]や...[4]など)を削除する必要があります。
したがって、どのループを使用しても、次のような構造になる必要があります...
$data = Array
(
[rules1.txt] => Array
(
[rules] => Array
(
[0] => throw rule blah
[1] => punt rule blah
)
[item] => rules1
[itemId] => 4
[new] => true
)
[rules2.txt] => Array
(
...
)
...
)
目標を達成するために、キーワードを保持する単純な追加の配列を作成しました...
$actions = Array(
'throw',
'punt'
);
...ループで使用して、次のような3番目の配列を作成します...
$removeThese = Array
(
[rules1.txt] => Array
(
[0] => 2
[1] => 3
[2] => 4
)
[rules2.txt] => Array
(
...
)
...
)
上記の配列$removeThisは、各ファイル(rules1.txt、rules2.txtなど)の$data['rules']から削除する必要がある$data['rules']インデックスを保持しているだけです。
私はPHPに耳を傾けているので、試した各アプローチで失敗しました。正しいデータがunset()されていないか、$ removeThisを作成しているときに、誤って配列を上書きしています。
ポイントA(削除するアイテムを含む元の$ data)からポイントB(アイテムを削除する更新された$ date)に到達するための最適な提案を探しています。
どうもありがとう。
編集
近いように見えますが$removeThisが上書きされている次のコードを試しました...$dataの最後のファイルと$data['rules']の最後のインデックスのみで終了します。
foreach ($data as $fileName => $fileData)
{
foreach ($fileData as $fdKey => $fdValue)
{
if ($fdKey === 'rules')
{
foreach ($fdValue as $key => $value)
{
foreach ($actions as $action)
{
if (strpos($value, $action) != 0)
{
if (!in_array($value, $removeThese[$fileName]))
{
$removeThese[$fileName][] = $key;
}
}
}
}
}
}
}
したがって、2つの問題があります。
1)$ removeThisを上書きする原因となったのはどこで間違っていますか?
2)これを書くためのより良い方法は何ですか?
修理済み
私が探していた最終的なコードは、それほど悪くはないと思いますが、学ぶことはたくさんあります...
foreach ($data as $fileName => $fileData)
{
foreach ($fileData as $fdKey => $fdValue)
{
if ($fdKey === 'rules')
{
foreach ($fdValue as $key => $value)
{
$value = rtrim($value, "\n");
if (!in_array($value, $actions) === true)
{
unset($data[$fileName][$fdKey][$key]);
}
}
}
}
}
試行錯誤がたくさんありますが、残念ながらそれは機能します!多くの皆さんがこれをより良く、大幅に速く行うことができたと確信しています。うまくいけば、私はスピードを上げるでしょう。
では、どうすれば自分の仕事に賛成票を投じ、自分の解決策を受け入れることができますか?!