我正在尝试获取数组的所有唯一值。
$Arr_TitleID = "92 1 92 38 1 6 1";
echo "Arr_TitleID: " . $Arr_TitleID;
$TitleID_Explode = explode(" ", $Arr_TitleID);
$BigTitleID_Explode = array_unique($TitleID_Explode);
$CTID_count = count($BigTitleID_Explode);
echo "count(CTID_count): " . $CTID_count;
for($i = 0; $i < $CTID_count; $i++)
{
echo "Piece $i = $BigTitleID_Explode[$i]";
}
输出:
Arr_TitleID: 92 1 92 38 1 6 1 count(CTID_count): 4 Piece 0 = 92 Piece 1 = 1 Piece 2 = Piece 3 = 38
6号在哪里?为什么6号应该是空白?
答案 0 :(得分:0)
数组索引不是连续的,如0,1,2,3
数组索引是0,1,3,5
Array
(
[0] => 92
[1] => 1
[3] => 38
[5] => 6
)
所以编辑这样的代码,只需添加一行作为数值重新索引
$Arr_TitleID = "92 1 92 38 1 6 1";
echo "Arr_TitleID: " . $Arr_TitleID;
$TitleID_Explode = explode(" ", $Arr_TitleID);
$BigTitleID_Explode = array_unique($TitleID_Explode);
//只需添加下面的行
$BigTitleID_Explode = array_values($BigTitleID_Explode);
//
$CTID_count = count($BigTitleID_Explode);
echo "count(CTID_count): " . $CTID_count;
for($i = 0; $i < $CTID_count; $i++)
{
echo "Piece $i = $BigTitleID_Explode[$i]";
}
答案 1 :(得分:0)
您的脚本输出如下所示,
Array
(
[0] => 92
[1] => 1
[3] => 38
[5] => 6
)
要使用for loop
进行迭代,您应该使用array_values
或尝试使用foreach
循环代替for
。
使用array_values
,您将获得一个数字索引数组
$BigTitleID_Explode = array_values(array_unique($TitleID_Explode));
结果应该是,
Array
(
[0] => 92
[1] => 1
[2] => 38
[3] => 6
)
答案 2 :(得分:0)
这是你的问题。当您可能找到唯一值时,数组不会创建新键,因此您的计数器不会高到足以捕获最后一个键。
$Arr_TitleID = "92 1 92 38 1 6 1";
echo "Arr_TitleID: " . $Arr_TitleID;
$TitleID_Explode = explode(" ", $Arr_TitleID);
$BigTitleID_Explode = array_unique($TitleID_Explode);
print_r($BigTitleID_Explode);
$CTID_count = count($BigTitleID_Explode);
echo "count(CTID_count): " . $CTID_count;
for($i = 0; $i < $CTID_count; $i++)
{
echo "Piece $i = $BigTitleID_Explode[$i]";
}
我添加的print_r行输出: 数组([0] =&gt; 92 1 =&gt; 1 [3] =&gt; 38 [5] =&gt; 6)
值6在键5上。
我建议在我添加的行所在的地方使用排序功能,然后一切都会正常运行。
有很多可供选择,所以我不能推荐一个,因为我不知道你需要哪一个用于你的目的,但这里有一个参考列表。