如何查找之前在多数组中找到的值
How to find values which were found before inside multi array
我目前确实遇到了以下问题。我必须检查数组是否包含完全相同的值以及之前是否找到它们。
int(3) 之前没有找到所以它是 0,
之前没有找到 int(8),所以它是 0,
之前没有找到 int(5),所以它是 0,
之前找到了 int(8) 所以它是 1,
int(3) 和 int(8) 未同时找到,因此为 0,依此类推。
我已经用 array_unique 试过了,但没有达到我想要的效果
例如:
array(7) {
[2] => array(1) {
[0] => int(3)
}
[3] => array(1) {
[0] => int(8)
}
[4] => array(1) {
[0] => int(5)
}
[5] => array(1) {
[0] => int(8)
}
[6] => array(2) {
[0] => int(3)
[1] => int(8)
}
[7] => array(2) {
[0] => int(2)
[1] => int(5)
}
[8] => array(2) {
[0] => int(3)
[1] => int(8)
}
}
它一定是这个样子
array(7) {
[2] => array(1) {
[0] => int(0)
}
[3] => array(1) {
[0] => int(0)
}
[4] => array(1) {
[0] => int(0)
}
[5] => array(1) {
[0] => int(1)
}
[6] => array(1) {
[0] => int(0)
}
[7] => array(1) {
[0] => int(0)
}
[8] => array(1) {
[0] => int(1)
}
}
<?php
$new_array = array();
$indicator = array();
$current_array = array(
"2" => array(3),
"3" => array(8),
"4" => array(5),
"5" => array(8),
"6" => array(3,8),
"7" => array(2,5),
"8" => array(3,8),
);
foreach($current_array as $key => $value){
if(!in_array($value, $new_array, true)){
$new_array[$key] = $value;
$indicator[$key] = false;
} else {
$indicator[$key] = true;
}
}
var_dump($indicator);
您可以使用 array_map()
和 serialize()
:
<?php
$data = [
2 => [
3,
],
3 => [
8,
],
4 => [
5,
],
5 => [
8,
],
6 => [
3,
8,
],
7 => [
2,
5,
],
8 => [
3,
8,
],
];
$occurrences = [];
$mapped = array_map(function (array $values) use (&$occurrences) {
// create serialized representation of the values
// which we can use as an index
$index = serialize($values);
// haven't seen these values before
if (!array_key_exists($index, $occurrences)) {
$occurrences[$index] = 1;
return 0;
}
// increase our counter
$occurrences[$index]++;
return $occurrences[$index] - 1;
}, $data);
var_dump($mapped);
参考:
有关示例,请参阅:
我目前确实遇到了以下问题。我必须检查数组是否包含完全相同的值以及之前是否找到它们。
int(3) 之前没有找到所以它是 0, 之前没有找到 int(8),所以它是 0, 之前没有找到 int(5),所以它是 0, 之前找到了 int(8) 所以它是 1, int(3) 和 int(8) 未同时找到,因此为 0,依此类推。
我已经用 array_unique 试过了,但没有达到我想要的效果
例如:
array(7) {
[2] => array(1) {
[0] => int(3)
}
[3] => array(1) {
[0] => int(8)
}
[4] => array(1) {
[0] => int(5)
}
[5] => array(1) {
[0] => int(8)
}
[6] => array(2) {
[0] => int(3)
[1] => int(8)
}
[7] => array(2) {
[0] => int(2)
[1] => int(5)
}
[8] => array(2) {
[0] => int(3)
[1] => int(8)
}
}
它一定是这个样子
array(7) {
[2] => array(1) {
[0] => int(0)
}
[3] => array(1) {
[0] => int(0)
}
[4] => array(1) {
[0] => int(0)
}
[5] => array(1) {
[0] => int(1)
}
[6] => array(1) {
[0] => int(0)
}
[7] => array(1) {
[0] => int(0)
}
[8] => array(1) {
[0] => int(1)
}
}
<?php
$new_array = array();
$indicator = array();
$current_array = array(
"2" => array(3),
"3" => array(8),
"4" => array(5),
"5" => array(8),
"6" => array(3,8),
"7" => array(2,5),
"8" => array(3,8),
);
foreach($current_array as $key => $value){
if(!in_array($value, $new_array, true)){
$new_array[$key] = $value;
$indicator[$key] = false;
} else {
$indicator[$key] = true;
}
}
var_dump($indicator);
您可以使用 array_map()
和 serialize()
:
<?php
$data = [
2 => [
3,
],
3 => [
8,
],
4 => [
5,
],
5 => [
8,
],
6 => [
3,
8,
],
7 => [
2,
5,
],
8 => [
3,
8,
],
];
$occurrences = [];
$mapped = array_map(function (array $values) use (&$occurrences) {
// create serialized representation of the values
// which we can use as an index
$index = serialize($values);
// haven't seen these values before
if (!array_key_exists($index, $occurrences)) {
$occurrences[$index] = 1;
return 0;
}
// increase our counter
$occurrences[$index]++;
return $occurrences[$index] - 1;
}, $data);
var_dump($mapped);
参考:
有关示例,请参阅: