As long as you are evaluating each information of an array, php will use an iterator internally. And that's a good thing given that loops are really cheap.
But if you don't want to explicitly iterate, here is a solution among others :
$johnDoeExists = array_walk_recursive( $data, function ( $value, $key ) {
return $key === 'name' && $value === 'john doe';
} );
array_walk_recursive
evaluates each element of the array, nested or not, with the defined callback function.
Or, wait...
If you REALLY don't want to use a loop and write an absolutely awful and unreliable code, here you go.
$johnExists = strpos(json_encode($data), "john doe") !== 0;
No seriously, just loop over your data.