我有一个数组:
Array
(
[user1] => Array
(
[id] => 1
[name] => 'john'
[types] => null
)
[user2] => Array
(
[id] => 2
[name] => 'jane'
[types] => Array(
[t_id] => 2
)
)
[user3] => Array
(
[id] => 3
[name] => 'jeff'
[types] => null
)
[user4] => Array
(
[id] => 4
[name] => 'steve'
[types] => Array(
[t_id] => 1
)
)
[user5] => Array
(
[id] => 5
[name] => 'rob'
[types] => Array(
[t_id] => 2
)
)
我需要找出t_id为1的第一个用户以及t_id为2的第一个用户
因此,在上面,Jane将是第一个t_id为2的用户,而Steve将是第一个t_id为1的用户。
我知道我可以遍历数组:
private $tid1;
private $tid2;
foreach($data as $_v) {
if($_v['types']['t_id'] === 1) $tid1 = $_v;
if($_v['types']['t_id'] === 2) $tid2 = $_v;
}
这看起来似乎效率低下,并且由于循环将继续运行,上述情况不会完全发挥作用,以后出现的t_id将替换变量。
有更有效的方法吗?
答案 0 :(得分:0)
要修复循环解决方案并在第一次出现时停止,您可以检查是否已经找到了决定。
if(!$tid1 && $_v['types']['t_id'] === 1) $tid1 = $_v;
'的foreach'因为解决方案通常足够有效。特别是在您需要查看多个条件的情况下。
答案 1 :(得分:0)
也许这会奏效。
foreach($data as $_v) {
if(!$tid1 && isset($_v['types']['t_id']) && $_v['types']['t_id'] === 1) $tid1 = $_v;
if(!$tid2 && isset($_v['types']['t_id']) && $_v['types']['t_id'] === 2) $tid2 = $_v;
if ($tid1 && $tid2) break;
}
答案 2 :(得分:0)
我的方法:
org.apache.commons.io.FileUtils.moveDirectory(srcDir, destDir);
答案 3 :(得分:0)
尝试使用array_walk
和array_unique
作为
$result = array();
array_walk($arr, function($v,$k) use(&$result){ if($v['types'] !== null){ $result[$v['name']] = $v['types']['t_id'];};});
$users = array_unique($result);
答案 4 :(得分:0)
拥有'目标ID'在数组中。
代码:
$targetIds = array(3, 2, 1); // required list of ids
$result = array();
while (current($users) && !empty($targetIds)) {
$cuKey = key($users);
$cu = current($users);
if ( !empty($cu['types']['t_id'])
&& in_array($cu['types']['t_id'], $targetIds)) { // process match
$result[$cuKey] = $cu;
$targetIds = array_diff($targetIds, array($cu['types']['t_id'])); // remove processed
}
next($users);
}
var_dump($result, $targetIds);
答案 5 :(得分:-1)
你可以在找到你的td时停止循环:
foreach($data as $_v) {
if(($_v['types']['t_id'] === 1) && !$tid1) $tid1 = $_v;
if(($_v['types']['t_id'] === 2) && !$tid2) $tid2 = $_v;
if($tid1 && $tid2) break;
}