我一直在使用数组,我意识到PHP不会返回重复键。
我正在使用一个保存用户基本信息的系统,当我查询它时,我得到一个这种格式的对象:
stdClass Object
(
[columnList] => Array
(
[0] => UID
[1] => PIN
)
[data] => Array
(
[0] => Array
(
[0] => 123456789
[1] => SOME_RANDOM_USER_PIN
)
)
)
现在,我创建了一个简单的函数来过滤并返回key=>value
对:
private function handle_obj( $array )
{
// if it's an object we treat it as such
if ( is_object( $array ) )
{
// reduce array->data to simpler format
$call_data = array_reduce( $array->data, 'array_merge', [] );
// trim array values
$call_data = array_map ( 'trim', $call_data );
// count each array and make sure they have the same number
if ( count($array->columnList) == count( $call_data ) )
{
// combine both arrays
$combine = array_combine ( $array->columnList, $call_data );
}
else
{
if ( count($array->data) > 0 )
{
foreach( $array->data as $column => $data )
{
$combine[] = array_combine( $array->columnList, $data );
}
}
else
{
$combine = $array;
}
}
}
}
结果是:
$combine == array(
'UID' => '123456789',
'PIN' => 'SOME_RANDOM_USER_PIN'
);
我目前遇到的问题是,UID
列出了plaintext
两次,第一次列在[118] => ����̅C�~J�U�V���;Z,o��l�L:�D�1�XO�%+⚃u���%V\�^b� 3���ԧ
中,但第二次是以加密字符串形式出现的。
stdClass Object
(
[columnList] => Array
(
[0] => UID
[1] => PIN
[2] => UID
)
[data] => Array
(
[0] => Array
(
[0] => 123456789
[1] => SOME_RANDOM_USER_PIN
[2] => ����̅C�~J�U�V���;Z,o��l�L:�D�1�XO�%+⚃u���%V\�^b� 3���ԧ
)
)
)
对象看起来像这样:
handle_obj
函数{{1}}然后会跳过第一行,只返回第二行。
现在,我不关心加密字段,我只想要明文附带的第一个字段。
我正在试图找出如何修改我只需要一个通用脚本的代码,无论项目的顺序如何回到我身边,我都不想只选择一个特定的行因为这也发生在其他领域。
我需要一种方法来比较两个数组项并选择未加密的项。