php数组在两个dementional数组内匹配(php array match within a two dimensional array)
例如,我有一个数组:
$objects = ['car', 'cat', 'dog', 'Peter'];
和另一个:
$types = [
'man' => ['Peter', 'John','...'],
'animal' => ['pig', 'cat', 'dog', '...'],
'vehicle' => ['bus', 'car', '...']
];
我的目标是获得一个数组:
$result = [
'man' => ['Peter'],
'animal' => ['cat', 'dog'],
'vehicle' => ['car']
]
在我目前的工作中,在数组中搜索最有效的方法是什么?我使用了两个foreach循环来搜索,但发现它太慢了,我的数组中有大约数千个元素,请帮助
for example, I have a array:
$objects = ['car', 'cat', 'dog', 'Peter'];
and another:
$types = [
'man' => ['Peter', 'John','...'],
'animal' => ['pig', 'cat', 'dog', '...'],
'vehicle' => ['bus', 'car', '...']
];
and my goal is get an array like:
$result = [
'man' => ['Peter'],
'animal' => ['cat', 'dog'],
'vehicle' => ['car']
]
what is the most efficient way to search within an array, in my current work, I use two foreach loop to search but figured it's too slow, I have about thousands of elements in my array.
原文:https://stackoverflow.com/questions/41669719
更新时间:2019-12-10 11:26
最满意答案
使用array_intersect :
foreach ($types as $key => $type) {
$result[$key] = array_intersect($type, $objects);
}
Use array_intersect:
foreach ($types as $key => $type) {
$result[$key] = array_intersect($type, $objects);
}
2017-01-16
相关问答
$period = array(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15);
$sma = array(6,9);
$array = array();
foreach ($sma as $range) {
$sum = array_sum(array_slice($period, 0, $range));
$result = array($range - 1 => $sum / $range);
for
...
$filteredUsers = [];
foreach ($users as $user) {
$filteredUsers[$user['id']] = $user;
}
// optionally:
// $filteredUsers = array_values($filteredUsers);
$filteredUsers = [];
foreach ($users as $user) {
$filteredUsers[$user['id']] = $user;
}
...
您可以使用array_intersect_assoc()并计算结果数字 echo count(array_intersect_assoc($arr1,$arr2));
http://php.net/manual/en/function.array-intersect-assoc.php 如果计数中的数字与要检查的索引键的数量相同,则检查两个数组是否相同,否则将得到匹配的键值数 You could use array_intersect_assoc() and count the result
...
使用array_intersect : foreach ($types as $key => $type) {
$result[$key] = array_intersect($type, $objects);
}
Use array_intersect: foreach ($types as $key => $type) {
$result[$key] = array_intersect($type, $objects);
}
不复杂: $inputsymbol = 'QCOM';
$data1 = [];
$fh = fopen("data1.csv", "r"));
while (($data = fgetcsv($fh, 1024)) !== FALSE) {
if ($data[0] == $inputsymbol) {
unset($data[0]);
$data1[] = $data;
}
}
fclose($fh);
那你究竟在哪里遇到这个问题? Not
...
使用A1中的搜索字符串: =SUMPRODUCT((E2:H6=A1)*ROW(E2:H6))
显然,如果范围内有多个搜索字符串,这将失败。 但是,您提供的数据集中的每个值都是唯一的,所以我认为这不是问题。 此外,如果这是可能的话,您需要澄清可能的几个不同的行数应该是哪个优先回报。 问候 With your search string in A1: =SUMPRODUCT((E2:H6=A1)*ROW(E2:H6))
Obviously this will fail if there is m
...
首先,你正在寻找implode()而不是explode() 。 function flatten($two_dim_array)
{
$result = array();
foreach ($two_dim_array as $array)
$result[] = implode("," $array);
return $result;
}
First of all, your are looking for implode() and not
...
按照主要行或列主要的顺序将二维数组展平,将其存储在一维数组中。 将数组的形状{n, m}存储在另一个一维整数数组中。 给定二维数组数组中元素的索引,可以使用该形状计算一维数组值中的索引。 这两种表示是同构的,并且都允许在恒定时间内查找值。 这与2-D数组在内存中的表现方式也很相似。 Flatten the 2-d array in either row-major or column-major order, storing it in one of the 1-d arrays. Store t
...
您不会使用三维数组,只能使用带有表格及其标记的二维数组。 或者,正如Alnitak已经提到的,查找对象更好: var map = {};
var dls = document.getElementsByTagName('dl');
for (var i = 0, i < dls.length; i++) {
var tableid = dls[i].id; // identifier?
var dts = dls[i].getElementsByTagName('dt'); //
...
不,没有可以实现此功能的内置功能。 但是,这是一个非常直接的foreach循环,所以我不明白你为什么需要一个函数: $result = array();
foreach ($array as $key => $value) {
$result[$key][1] = $value;
}
print_r($result);
如果你想要一个更实用的方法,你可以使用array_walk() : // walks through the original $array and adds a n
...