我想这样做:
$matched_tags[$tag]++
作为跟踪循环期间找到给定$标记的次数的简单方法。
这似乎是在第一次遇到任何新的$ tag时抛出NOTICE,因为索引是未定义的。 PHP会自动对其进行自动生成,将其设置为0并将其递增,但无论如何都会抛出通知。
现在我喜欢将Notices作为最佳实践进行开发,所以我不想压制它们。但对我而言,我所做的并不值得注意。
我真的必须:
if ( ! isset ( $matched_tags[$tag] ) ) $matched_tags[$tag] = 0;
$matched_tags[$tag]++;
哦,真是太痛苦了。请告诉我有一个更优雅的方式,或者我发誓我会切换到Perl所以帮助我。
答案 0 :(得分:2)
现在使用@解决错误:
@$matched_tags[$tag]++;
答案 1 :(得分:2)
我找到了另一种增加未定义数组项的方法。它看起来像一种黑客,但它很明显,但仍然很短。
假设您需要增加少量嵌套数组的叶值。使用(x_,y_) = (2.5, 3.6)
可能太烦人了:
isset()
在那里重复三次的数组项目的名称,在你眼中涟漪。
尝试使用<?php
error_reporting(E_ALL);
$array['root']['node'][10]['node'][20]['leaf'][30]['totalCount'] =
isset($array['root']['node'][10]['node'][20]['leaf'][30]['totalCount'])
? ($array['root']['node'][10]['node'][20]['leaf'][30]['totalCount'] + 1)
: 1;
运算符来获取数组项引用。采用不引起任何通知或错误的引用:
&
它运作正常,但您也可以避免<?php
error_reporting(E_ALL);
$item = &$array['root']['node'][10]['node'][20]['leaf'][30]['totalCount'];
// $item is null here
$item++;
unset($item);
echo $array['root']['node'][10]['node'][20]['leaf'][30]['totalCount']; // 1
到null
投射:
0
如果您已使用PHP7,请使用coalesce运算符而不是<?php
error_reporting(E_ALL);
$item = &$array['root']['node'][10]['node'][20]['leaf'][30]['totalCount'];
// $item is null here
$item = isset($item) ? ($item + 1) : 1;
unset($item);
echo $array['root']['node'][10]['node'][20]['leaf'][30]['totalCount']; // 1
:
isset()
答案 2 :(得分:1)
三元运营商是否不那么痛苦?
array_key_exists( $tag, $matched_tags ) ? $matched_tags[$tag]++ : $matched_tags[$tag] = 1;