下面我有一些PHP代码
-在用户阵列上迭代
-生成所有用户的HTML选择列表
-如果$subscriberIdFromDb
数组中的用户存在于所有用户的数组中,则它会向HTML Selection元素添加一个selected
属性
-如果满足上述条件,它还会添加一个具有用户ID的"隐藏表单"字段元素。
现在,在下面的$subscriberIdFromDb
数组中,您可以看到4个测试用户。然而,当我运行下面的代码时,似乎总是添加ID为1的第五个用户。
我不明白为什么要添加第五个用户,我将数据库结果导出到这些测试数组中,并在不同的系统上尝试,但它仍然这样做,所以似乎是这段代码中的某些内容导致了问题。
你知道是什么导致了这个问题吗?
PHP数组从我的测试系统中所有用户的数据库结果返回。。。
<?php
$userArray = array (
'seed_chris_id' =>
array (
'id' => 'seed_chris_id',
'user_name' => 'chris',
'first_name' => 'Chris',
'last_name' => 'Olliver',
),
1 =>
array (
'id' => '1',
'user_name' => 'jasondavis',
'first_name' => 'Jason',
'last_name' => 'Davis',
),
'1702c3d0-df12-2d1b-d964-521becb5e3ad' =>
array (
'id' => '1702c3d0-df12-2d1b-d964-521becb5e3ad',
'user_name' => 'Jeff',
'first_name' => 'Jeff',
'last_name' => 'Mosley',
),
'seed_jim_id' =>
array (
'id' => 'seed_jim_id',
'user_name' => 'jim',
'first_name' => 'Jim',
'last_name' => 'Brennan',
),
'6ce98c71-80c8-8b04-1767-52ccdd1b7c96' =>
array (
'id' => '6ce98c71-80c8-8b04-1767-52ccdd1b7c96',
'user_name' => 'TestUser',
'first_name' => 'John',
'last_name' => 'Doe',
),
'seed_max_id' =>
array (
'id' => 'seed_max_id',
'user_name' => 'max',
'first_name' => 'Max',
'last_name' => 'Jensen',
),
'1d77045b-fb16-d925-b19e-52c85d82bf81' =>
array (
'id' => '1d77045b-fb16-d925-b19e-52c85d82bf81',
'user_name' => 'PortalUser',
'first_name' => 'Portal',
'last_name' => 'User',
),
'seed_sally_id' =>
array (
'id' => 'seed_sally_id',
'user_name' => 'sally',
'first_name' => 'Sally',
'last_name' => 'Bronsen',
),
'seed_sarah_id' =>
array (
'id' => 'seed_sarah_id',
'user_name' => 'sarah',
'first_name' => 'Sarah',
'last_name' => 'Smith',
),
'95803cf3-84ea-493a-a030-52b0abcd9b0c' =>
array (
'id' => '95803cf3-84ea-493a-a030-52b0abcd9b0c',
'user_name' => 'test',
'first_name' => 'test',
'last_name' => 'test',
),
'seed_will_id' =>
array (
'id' => 'seed_will_id',
'user_name' => 'will',
'first_name' => 'Will',
'last_name' => 'Westin',
),
);
PHP数组从我的订阅用户数据库结果返回。。。
$subscriberIdFromDb = array (
0 => '1d77045b-fb16-d925-b19e-52c85d82bf81',
1 => '95803cf3-84ea-493a-a030-52b0abcd9b0c',
2 => 'seed_max_id',
3 => 'seed_sally_id',
);
echo '<pre>';
print_r($subscriberIdFromDb);
echo '</pre>';
$hiddenSubscriberListIds = '';
$selHtml = '<select id="subscribersSelection" name="subscribers" data-placeholder="" style="width:350px;" multiple tabindex="3">';
foreach ($userArray as $userIdKey => $value) {
if(in_array($userIdKey, $subscriberIdFromDb)) {
echo '$userIdKey = '.$userIdKey. '<br>';
$selHtml .= '<option value="'.$userIdKey.'" selected>'.$value['user_name'].'</option>';
$hiddenSubscriberListIds .= '<input type="hidden" name="subscribers[]" value="'.$userIdKey.'" id="'.$userIdKey.'">';
}else{
$selHtml .= '<option value="'.$userIdKey.'">'.$value['user_name'].'</option>';
}
}
$selHtml .= '</select>';
$selHtml .= $hiddenSubscriberListIds;
echo $selHtml;
?>
当上面的代码运行时,它输出这个HTML。。。
<select id="subscribersSelection" name="subscribers" data-placeholder="" style="width:350px;" multiple tabindex="3">
<option value="seed_chris_id">chris</option>
<option value="1" selected>jasondavis</option>
<option value="1702c3d0-df12-2d1b-d964-521becb5e3ad">Jeff</option>
<option value="seed_jim_id">jim</option>
<option value="6ce98c71-80c8-8b04-1767-52ccdd1b7c96">TestUser</option>
<option value="seed_max_id" selected>max</option>
<option value="1d77045b-fb16-d925-b19e-52c85d82bf81" selected>PortalUser</option>
<option value="seed_sally_id" selected>sally</option>
<option value="seed_sarah_id">sarah</option>
<option value="95803cf3-84ea-493a-a030-52b0abcd9b0c" selected>test</option>
<option value="seed_will_id">will</option>
</select>
<input type="hidden" name="subscribers[]" value="1" id="1">
<input type="hidden" name="subscribers[]" value="seed_max_id" id="seed_max_id">
<input type="hidden" name="subscribers[]" value="1d77045b-fb16-d925-b19e-52c85d82bf81" id="1d77045b-fb16-d925-b19e-52c85d82bf81">
<input type="hidden" name="subscribers[]" value="seed_sally_id" id="seed_sally_id">
<input type="hidden" name="subscribers[]" value="95803cf3-84ea-493a-a030-52b0abcd9b0c" id="95803cf3-84ea-493a-a030-52b0abcd9b0c">
您可以看到<option value="1" selected>jasondavis</option>
和<input type="hidden" name="subscribers[]" value="1" id="1">
被添加,即使ID 1在我的数组中不存在!!!
尝试告诉in_array
使用"严格"模式来比较值。
in_array($userIdKey, $subscriberIdFromDb, TRUE)
现在的情况是:$userIdKey
是1
(一个整数),它正在与$subscriberIdFromDb
中的每个值进行比较。它是这样比较的:1 == '1d77045b-fb16-d925-b19e-52c85d82bf81'
。
这两种类型不匹配,因此PHP将第二个字符转换为int。当将字符串转换为int时,PHP读取字符串,直到第一个非数字字符。因此CCD_ 11或CCD_。(请参见:https://eval.in/197010)
将TRUE
作为第三个参数传递给in_array
使其使用===
。1 === '1d77045b-fb16-d925-b19e-52c85d82bf81'
为false,因为类型不匹配。
附言:您也可以通过在$userArray
中将1 =>
更改为'1' =>
来解决此问题。