Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在多维数组php codeigniter中使数组唯一_Php_Mysql_Arrays_Codeigniter_Multidimensional Array - Fatal编程技术网

在多维数组php codeigniter中使数组唯一

在多维数组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(

我有这个数组

排列(

我有一系列的产品,我需要确保它们是独一无二的。 需要通过id使此数组唯一。这些数组是通过推送值生成的

我试图解决这个问题已经一个多星期了,但我没能成功。我知道这应该很容易…但不管怎样-我不明白:D

试试这个:

$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);