在多维数组php codeigniter中使数组唯一
我有这个数组 排列( 我有一系列的产品,我需要确保它们是独一无二的。 需要通过id使此数组唯一。这些数组是通过推送值生成的 我试图解决这个问题已经一个多星期了,但我没能成功。我知道这应该很容易…但不管怎样-我不明白:D试试这个:在多维数组php codeigniter中使数组唯一,php,mysql,arrays,codeigniter,multidimensional-array,Php,Mysql,Arrays,Codeigniter,Multidimensional Array,我有这个数组 排列( 我有一系列的产品,我需要确保它们是独一无二的。 需要通过id使此数组唯一。这些数组是通过推送值生成的 我试图解决这个问题已经一个多星期了,但我没能成功。我知道这应该很容易…但不管怎样-我不明白:D试试这个: $array = array( 0 => array( "name" => "test", "id" => 4 ), 1 => array(
$array = array(
0 => array(
"name" => "test",
"id" => 4
),
1 => array(
"name" => "test2",
"id" => 152
),
2 => array(
"name" => "test2",
"id" => 152
)
);
$newArray = array();
foreach($array as $value) {
$newArray[$value['id']]['name'] = $value['name'];
$newArray[$value['id']]['id'] = $value['id'];
}
不确定数组是如何生成的,但是,如果可以更改,可以直接将数组键设置为id,并检查id是否已设置 否则,您可以执行以下操作:
$unique = array();
foreach( $array as $values ) {
if( ! isset( $unique[$values['id']] ) ) {
$unique[$values['id']] = $values;
}
}
这将使您的阵列具有唯一性:
$array = array(
0 => array(
"name" => "test",
"id" => 4
),
1 => array(
"name" => "test2",
"id" => 152
),
2 => array(
"name" => "test2",
"id" => 152
) );
$result = array();
$index = array();
foreach($array as $i => $elem) {
if(!isset($index[$elem['id']])) {
$result[$i] = $elem;
$index[$elem['id']] = 1;
}
}
echo var_export($result);
输出:
array (
0 =>
array (
'name' => 'test',
'id' => 4,
),
1 =>
array (
'name' => 'test2',
'id' => 152,
),
)
这会起作用。它可以被认为比
for
循环更干净,但我不确定性能如何
$array = [
[ "name" => "test", "id" => 4 ],
[ "name" => "test2", "id" => 152 ],
[ "name" => "test2", "id" => 152 ]
];
array_walk($array, function(&$item, $idx) use($array){
$matches = array_slice(array_keys($array, $item), 1);
if (in_array($idx, $matches)) {
$item = false;
}
});
$array = array_filter($array);
编辑由于更新了要使用的数据集,因此需要将其展平1级:
$array = call_user_func_array('array_merge', $array);
你所说的唯一是什么意思?id唯一?数组从何而来?来自db?难道
array\u unique
不适合你吗?@RonniEgeriis不,它不适合,因为元素按其string
表示被认为是唯一的,因此数组数组不能正确使用。(string)array()是数组+通知。对不起,伙计们,事实上我已经发布了错误的数组。这是正确的数组。事实上,我已经发布了错误的数组。这是正确的数组。我已经尝试将它展平到1级,就像你使用call_user_func_数组函数所说的那样,但是没有发生任何事情。你能提供JSON转储吗?很难使用var_dump outputI以某种方式将数组展平,如下所示:
$array = [
[ "name" => "test", "id" => 4 ],
[ "name" => "test2", "id" => 152 ],
[ "name" => "test2", "id" => 152 ]
];
array_walk($array, function(&$item, $idx) use($array){
$matches = array_slice(array_keys($array, $item), 1);
if (in_array($idx, $matches)) {
$item = false;
}
});
$array = array_filter($array);
$array = call_user_func_array('array_merge', $array);