Atlas Scientific pH project - serialEvent3 problems
On a typical Arduino, the delay between loop() ending and loop() running again is a few microseconds.  Serial.println() in getPh() is interrupt-driven so that call too takes only a few microseconds.  Writing two bytes with Serial3.print() at 38400 bps will take about half a millisecond.  In short, there is plenty of time for loop() to run several times before  serialEvent3() sets sensor_string_complete.

To call  getPh() once and readph() once per loop(), instead of 

if (sensor_string_complete == true) readph();


say

while (!sensor_string_complete) {}
readph();


This will stall the loop while the pH sensor takes and reports a reading.

Note, in getPh() instead of using two separate Serial3.print() statements, you can just say Serial3.print("r\r").