title: PHP too slow, can anyone see a way to make it faster?
body: <p>Given a list of phone numbers, determine if it is consistent in the sense that no number is the prefix of another. Let’s say the phone catalogue listed these numbers:</p>
  
  <p>Emergency 911
  Alice 97 625 999
  Bob 91 12 54 26</p>
  
  <p>In this case, it’s not possible to call Bob, because the central would direct your call to the emergency line as soon as you had dialled the first three digits of Bob’s phone number. So this list would not be consistent.</p>
  
  <p>Input</p>
  
  <p>The first line of input gives a single integer, 1≤t≤40, the number of test cases. Each test case starts with n, the number of phone numbers, on a separate line, 1≤n≤10000. Then follows n lines with one unique phone number on each line. A phone number is a sequence of at most ten digits.</p>
  
  <p>Output</p>
  
  <p>For each test case, output “YES” if the list is consistent, or “NO” otherwise.</p>
  
  <hr>
  
  <p>The program is supposed to read fron standard in, and write to standard out. We can also assume that the input will adhere to the specification. This is my code:</p>
  
  <pre><code>&lt;?php
  
      fscanf(STDIN, "%d", $numOfTestCases);
  
      for ($i = 0; $i &lt; $numOfTestCases; $i++) { //Loop for reading test cases
          fscanf(STDIN, "%d", $numOfPhoneNumbers);
  
          $phoneNumbers = array();
          $isConsistent = true;
  
          for ($j = 0; $j &lt; $numOfPhoneNumbers; $j++) { //Loop for reading phone numbers of each test case
              fscanf(STDIN, "%d", $newNumber);
  
              if ($isConsistent != false) { //If list already inconsistent, we dont need to check further input
                  if (empty($phoneNumbers)) { // If the array of phone numbers is empty, we just add the new one
                      $phoneNumbers[$j] = $newNumber;
                  } else {
                      foreach ($phoneNumbers as $k =&gt; $testNumber) { //Loop for checking if new number is consistent or not
                          $newNumLen = strlen($newNumber);
                          $testNumlen = strlen($testNumber);
  
                          $newBeginning = substr($newNumber, 0, $testNumlen);
                          $testBeginning = substr($testNumber, 0, $newNumLen);
  
                          if ($newNumber == $testBeginning || $testNumber == $newBeginning) {
                              $isConsistent = false;
                              break;
                          }
                      }
  
                      if ($isConsistent == true) $phoneNumbers[$j] = $newNumber;
                  }                   
              } 
          }
  
          $newAnswer = ($isConsistent) ? "YES" : "NO";
          $ansString = ($i == 0) ? $newAnswer : $ansString."\n".$newAnswer;
      }
  
      fwrite(STDOUT, $ansString);
  
      exit(0);
  ?&gt;
  </code></pre>
  
  <p>My problem is that there is a test program that is running this, which has a timeout of 4 seconds. The second test file always times out. I don't have access to the test program or files but I assume that the file is very long, maybe even 40 test cases with 10000 phone numbers in each case.</p>
  
  <p>Can anyone see how I could make this code run faster in any way?</p>
  
  <p>Here is a sample run:</p>
  
  <pre><code>Sample Input:
  
  2
  3
  911
  97625999
  91125426
  5
  113
  12340
  123440
  12345
  98346
  
  Sample Output:
  
  NO
  YES
  </code></pre>