I do not think you can change the IP value within the sort so that would need to be done afterwards. How about something like this though for the sort function (you would need to test performance):
$knownIPs = array(
    '1.1.1.5' => 1,
    '1.1.7.3' => 2,
);
$array = array(
    array('f', '0.0.0.0'),
    array('t', '1.1.7.3'),
    array('w', '1.1.1.5'),
    array('r', '1.1.1.6'),
    array('c', '1.1.1.7'),
    array('a', '1.1.1.8'),
    array('i', '1.1.1.9'),
);
uasort($array, function ($a, $b) {
  global $knownIPs;
  $knownIPsKeys = array_keys($knownIPs);
  //if a is a known IP then it has to be before any unknown IP
  if(in_array($a[1],$knownIPsKeys) && !in_array($b[1],$knownIPsKeys)){
    return -1;
  }
  //if b is a known IP then it has to be before any unknown IP
  if(in_array($b[1],$knownIPsKeys) && !in_array($a[1],$knownIPsKeys)){
    return 1;
  }
  //if a and b are both known then check if their order is the same or different
  if(in_array($a[1],$knownIPsKeys) && in_array($b[1],$knownIPsKeys)){
    //if a and b have the same order then compare on the other field as per default
    if($knownIPs[$a[1]]===$knownIPs[$b[1]]){
      return strcmp($a[0], $b[0]);
    }
    //otherwise compare on the order value
    return $knownIPs[$a[1]]<$knownIPs[$b[1]]?-1:1;
  }
  //compare on other field as default
  return strcmp($a[0], $b[0]);
});
print_r($array);
This is a simple script using a global variable to hold the known IPs, there are a number of different ways that $knownIPs can be set up and used depending obviously on the rest of your code but hopefully this gives an idea of how to achieve the sorting.