多次元配列をループして、新しいサブ配列を追加しようとしています。私のコードはエラーを返しませんが、新しいアイテムも追加しません。
次のコードがあります。
foreach ($data['switches'] as $switch) {
foreach ($switch['atags'] as $attributelist) {
$nohardwareAttribFound = false;
foreach ($attributelist as $attribute) {
$pos = strpos(trim($attribute),'$attr_2_');
if ($pos !==false) {
//echo 'in the loop';
//found it. extract and exit loop
$modelnumber = substr(trim($attribute),8);
$hardwaremodel = array();
$hardwaremodel['tag'] = 'hardware_model:'.$modelnumber;
array_push($switch['atags'],$hardwaremodel);
print_r($switch);
//echo '<br>=====<br>';
$nohardwareAttribFound = true;
}
}//end foreach ($attributelist
}// end foreach ($switch['atags']
if ($nohardwareAttribFound==false) {
$hardwaremodel['tag'] = 'Unknown';
array_push($switch['atags'],$hardwaremodel);
}//end if
}// end foreach ($data['switches']
データを次のようにしたいと思います。
[atags] => Array (
[0] => Array ( [tag] => $id_365 )
[1] => Array ( [tag] => $typeid_8 )
[2] => Array ( [tag] => $any_object )
[3] => Array ( [tag] => $casd )
[4] => Array ( [tag] => $unmounted )
[5] => Array ( [tag] => $no_asset_tag )
[6] => Array ( [tag] => $attr_2_1086 )
[7] => Array ( [tag] => $untagged )
[8] => Array ( [tag] => hardware_model:1086 ) ) )
最後の array - element[8]
は、追加した新しいサブ配列を表します。ステートメントは正しいようにprint_r()
見えますが、ビューに渡された結果をループすると、実際には新しいタグ配列が追加されていないことがわかります。
の代わりに何らかの置換が必要array_push()
ですか?
ループ中に配列を変更するのが得策でない場合は、アイテムが存在するかどうかを確認するだけでよいでしょうか。各スイッチの ['atags'] 配列に "$attr_2_NNNN" のような値を持つ [tag] が含まれているかどうかを確認するにはどうすればよいですか (N は数値)。たとえば、上記のサンプル配列の要素 6 を確認してください。課題は、常に要素 6 であるとは限らず、タグが attr_2 値を持つことが常に保証されるとは限らないことです。関数があることは知っていin_array()
ます...次のようなものを試します:
if (in_array(array('$attr_2_'), $switches['atags']))
$nohardwareAttribFound 変数に関するロジックにバグがあり、これを修正します。
ありがとう