: 나는 ID를 가진 행이 이름을 가질 수 있도록 DB를 업데이트해야우아한 방법 서로
$ids = array(4, 13, 6, 8, 10);
$names = array('alice', 'bob', 'charles', 'david', 'elizabeth');
을 배열에. 여기에 까다로운 비트는 다음과 같습니다
$special_name = 2; // the index in $names, in this case we mean 'charles'
$special_id = 13; // the id value
난 상관 없어 어떤에 대해 이름이 $special_name
와 이름이 $special_id
에 가야한다는 점을 제외하는 ID에 간다 : 나는 또한 두 개의 int 치의 있습니다.
가장 우아한 방법은 무엇입니까? 내가 생각하고있는 모든 방법들은 꽤 지저분 해 보인다.
$mapped = new array();
$mapped[$special_id] = $names[$special_name];
foreach ($ids as $id) {
if ($id != $special_id) {
$mapped[$id] = current($names);
}
// advance $names pointer
$next_name = next($names);
if ($next_name == $special_name) next($names);
}
나는 것을 테스트하지 않은 : 나는 생각했습니다 가장 좋은 아마도 이런 새로운 배열을 구축, 나머지는 각 배열에서 특별한 아이템을 추출하고, 그 첫째을하고하는 것입니다 아직 (나)에 대한 것이지만 다음과 같은 것을 생성하려고합니다.
$mapped = array(13=>'charles', 4=>'alice',6=>'bob', 8=>'david', 10=>'elizabeth');
그런 다음 실제 업데이트를 수행합니다. 더 좋은 생각있어?
업데이트 : 위의 가능한 해결책을 추가하십시오. 한편 몇 가지 대답이 들어 왔습니다.
인크 레 더블. unset()에 2 개의 args를 넘겨주는 것을 제외하고는 똑같은 해결책을 줄 줄을 올리려고했습니다. 같은 변수 이름을 가지고도 @chris에 오싹 해지는 – goat
? Oo : D – Gordon
unset도 사용하려고 생각했지만 array_combine이 내 마음을 어지럽게했습니다. 기분이 좀 나아 졌어. 멋지다, 그런 배열을 추가 할 수 있는지 몰랐다. 고마워. – sprugman